{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "0faab4e5",
   "metadata": {},
   "source": [
    "# Step 0: Load Packages and Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "ec40a842",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.metrics.pairwise import cosine_similarity\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "\n",
    "import os\n",
    "from scipy.sparse import coo_matrix"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a6b3b0f",
   "metadata": {},
   "source": [
    "# Step 1: Data Loading and Preprocessing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ab91064a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['Uniq Id', 'Crawl Timestamp', 'Dataset Origin', 'Product Id',\n",
       "       'Product Barcode', 'Product Company Type Source',\n",
       "       'Product Brand Source', 'Product Brand Normalised Source',\n",
       "       'Product Name Source', 'Match Rank', 'Match Score', 'Match Type',\n",
       "       'Retailer', 'Product Category', 'Product Brand', 'Product Name',\n",
       "       'Product Price', 'Sku', 'Upc', 'Product Url', 'Market',\n",
       "       'Product Description', 'Product Currency',\n",
       "       'Product Available Inventory', 'Product Image Url',\n",
       "       'Product Model Number', 'Product Tags', 'Product Contents',\n",
       "       'Product Rating', 'Product Reviews Count', 'Bsr', 'Joining Key'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import pandas as pd\n",
    "\n",
    "# Read the dataset\n",
    "train_data = pd.read_csv('C:\\\\Users\\\\govin\\\\Downloads\\\\E-Commerece-Recommendation-System-Machine-Learning-Product-Recommendation-system--main\\\\marketing_sample_for_walmart_com-walmart_com_product_review__20200701_20201231__5k_data.tsv.gz', sep='\\t')\n",
    "\n",
    "# Display the columns\n",
    "train_data.columns\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "42b87218",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Uniq Id</th>\n",
       "      <th>Product Id</th>\n",
       "      <th>Product Rating</th>\n",
       "      <th>Product Reviews Count</th>\n",
       "      <th>Product Category</th>\n",
       "      <th>Product Brand</th>\n",
       "      <th>Product Name</th>\n",
       "      <th>Product Image Url</th>\n",
       "      <th>Product Description</th>\n",
       "      <th>Product Tags</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1705736792d82aa2f2d3caf1c07c53f4</td>\n",
       "      <td>2e17bf4acecdece67fc00f07ad62c910</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Premium Beauty &gt; Premium Makeup &gt; Premium Nail...</td>\n",
       "      <td>OPI</td>\n",
       "      <td>OPI Infinite Shine, Nail Lacquer Nail Polish, ...</td>\n",
       "      <td>https://i5.walmartimages.com/asr/0e1f4c51-c1a4...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>OPI Infinite Shine, Nail Lacquer Nail Polish, ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>95a9fe6f4810fcfc7ff244fd06784f11</td>\n",
       "      <td>076e5854a62dd283c253d6bae415af1f</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Beauty &gt; Hair Care &gt; Hair Color &gt; Auburn Hair ...</td>\n",
       "      <td>Nice'n Easy</td>\n",
       "      <td>Nice n Easy Permanent Color, 111 Natural Mediu...</td>\n",
       "      <td>https://i5.walmartimages.com/asr/9c8e42e4-13a5...</td>\n",
       "      <td>Pack of 3 Pack of 3 for the UPC: 381519000201 ...</td>\n",
       "      <td>Nice 'n Easy Permanent Color, 111 Natural Medi...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8d4d0330178d3ed181b15a4102b287f2</td>\n",
       "      <td>8a4fe5d9c7a6ed26cc44d785a454b124</td>\n",
       "      <td>4.5</td>\n",
       "      <td>29221.0</td>\n",
       "      <td>Beauty &gt; Hair Care &gt; Hair Color &gt; Permanent Ha...</td>\n",
       "      <td>Clairol</td>\n",
       "      <td>Clairol Nice N Easy Permanent Color 7/106A Nat...</td>\n",
       "      <td>https://i5.walmartimages.com/asr/e3a601c2-6a2b...</td>\n",
       "      <td>This Clairol Nice N Easy Permanent Color gives...</td>\n",
       "      <td>Clairol Nice 'N Easy Permanent Color 7/106A Na...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                            Uniq Id                        Product Id  \\\n",
       "0  1705736792d82aa2f2d3caf1c07c53f4  2e17bf4acecdece67fc00f07ad62c910   \n",
       "1  95a9fe6f4810fcfc7ff244fd06784f11  076e5854a62dd283c253d6bae415af1f   \n",
       "2  8d4d0330178d3ed181b15a4102b287f2  8a4fe5d9c7a6ed26cc44d785a454b124   \n",
       "\n",
       "   Product Rating  Product Reviews Count  \\\n",
       "0             NaN                    NaN   \n",
       "1             NaN                    NaN   \n",
       "2             4.5                29221.0   \n",
       "\n",
       "                                    Product Category Product Brand  \\\n",
       "0  Premium Beauty > Premium Makeup > Premium Nail...           OPI   \n",
       "1  Beauty > Hair Care > Hair Color > Auburn Hair ...   Nice'n Easy   \n",
       "2  Beauty > Hair Care > Hair Color > Permanent Ha...       Clairol   \n",
       "\n",
       "                                        Product Name  \\\n",
       "0  OPI Infinite Shine, Nail Lacquer Nail Polish, ...   \n",
       "1  Nice n Easy Permanent Color, 111 Natural Mediu...   \n",
       "2  Clairol Nice N Easy Permanent Color 7/106A Nat...   \n",
       "\n",
       "                                   Product Image Url  \\\n",
       "0  https://i5.walmartimages.com/asr/0e1f4c51-c1a4...   \n",
       "1  https://i5.walmartimages.com/asr/9c8e42e4-13a5...   \n",
       "2  https://i5.walmartimages.com/asr/e3a601c2-6a2b...   \n",
       "\n",
       "                                 Product Description  \\\n",
       "0                                                NaN   \n",
       "1  Pack of 3 Pack of 3 for the UPC: 381519000201 ...   \n",
       "2  This Clairol Nice N Easy Permanent Color gives...   \n",
       "\n",
       "                                        Product Tags  \n",
       "0  OPI Infinite Shine, Nail Lacquer Nail Polish, ...  \n",
       "1  Nice 'n Easy Permanent Color, 111 Natural Medi...  \n",
       "2  Clairol Nice 'N Easy Permanent Color 7/106A Na...  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data = train_data[['Uniq Id','Product Id', 'Product Rating', 'Product Reviews Count', 'Product Category', 'Product Brand', 'Product Name', 'Product Image Url', 'Product Description', 'Product Tags']]\n",
    "train_data.head(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f75a34bb",
   "metadata": {},
   "source": [
    "# Basic Operations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "88d91adf",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       OPI Infinite Shine, Nail Lacquer Nail Polish, ...\n",
       "1       Nice 'n Easy Permanent Color, 111 Natural Medi...\n",
       "2       Clairol Nice 'N Easy Permanent Color 7/106A Na...\n",
       "3       Kokie Professional Matte Lipstick, Hot Berry, ...\n",
       "4       Gillette TRAC II Plus Razor Blade Refills, Fit...\n",
       "                              ...                        \n",
       "4995    Garden Mint Room Spray (Double Strength), 4 ou...\n",
       "4996    Garnier Nutrisse Nourishing Hair Color Creme (...\n",
       "4997    Nail File Electric Drill, 6 in 1 Professional ...\n",
       "4998    Creed Love In Black Hair And Body Wash 6.8oz/2...\n",
       "4999                    Foundation, Wal-mart, Walmart.com\n",
       "Name: Product Tags, Length: 5000, dtype: object"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data['Product Tags']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e377ddbb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(5000, 10)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "9abc0a9c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Uniq Id                     0\n",
       "Product Id                  0\n",
       "Product Rating           2806\n",
       "Product Reviews Count    1654\n",
       "Product Category           10\n",
       "Product Brand              13\n",
       "Product Name                0\n",
       "Product Image Url           0\n",
       "Product Description      1127\n",
       "Product Tags                0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "40da2a64",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Fill missing values in 'Product Rating' with a default value (e.g., 0)\n",
    "train_data['Product Rating'].fillna(0, inplace=True)\n",
    "# Fill missing values in 'Product Reviews Count' with a default value (e.g., 0)\n",
    "train_data['Product Reviews Count'].fillna(0, inplace=True)\n",
    "# Fill missing values in 'Product Category' with a default value (e.g., 'Unknown')\n",
    "train_data['Product Category'].fillna('', inplace=True)\n",
    "# Fill missing values in 'Product Brand' with a default value (e.g., 'Unknown')\n",
    "train_data['Product Brand'].fillna('', inplace=True)\n",
    "# Fill missing values in 'Product Description' with an empty string\n",
    "train_data['Product Description'].fillna('', inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c6ae1d91",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Uniq Id                  0\n",
       "Product Id               0\n",
       "Product Rating           0\n",
       "Product Reviews Count    0\n",
       "Product Category         0\n",
       "Product Brand            0\n",
       "Product Name             0\n",
       "Product Image Url        0\n",
       "Product Description      0\n",
       "Product Tags             0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "fa4021f6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.duplicated().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "3028bdfc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# make columns shorter\n",
    "# Define the mapping of current column names to shorter names\n",
    "column_name_mapping = {\n",
    "    'Uniq Id': 'ID',\n",
    "    'Product Id': 'ProdID',\n",
    "    'Product Rating': 'Rating',\n",
    "    'Product Reviews Count': 'ReviewCount',\n",
    "    'Product Category': 'Category',\n",
    "    'Product Brand': 'Brand',\n",
    "    'Product Name': 'Name',\n",
    "    'Product Image Url': 'ImageURL',\n",
    "    'Product Description': 'Description',\n",
    "    'Product Tags': 'Tags',\n",
    "    'Product Contents': 'Contents'\n",
    "}\n",
    "# Rename the columns using the mapping\n",
    "train_data.rename(columns=column_name_mapping, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "7b988d09",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data['ID'] = train_data['ID'].str.extract(r'(\\d+)').astype(float)\n",
    "train_data['ProdID'] = train_data['ProdID'].str.extract(r'(\\d+)').astype(float)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "57762064",
   "metadata": {},
   "source": [
    "# Step 2: EDA (Exploratory Data Analysis)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "77d39f33",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of unique users: 1721\n",
      "Number of unique items: 1697\n",
      "Number of unique ratings: 36\n"
     ]
    }
   ],
   "source": [
    "# Basic statistics\n",
    "num_users = train_data['ID'].nunique()\n",
    "num_items = train_data['ProdID'].nunique()\n",
    "num_ratings = train_data['Rating'].nunique()\n",
    "print(f\"Number of unique users: {num_users}\")\n",
    "print(f\"Number of unique items: {num_items}\")\n",
    "print(f\"Number of unique ratings: {num_ratings}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "5d91b1a1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoUAAAIhCAYAAAA4pMAsAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3iT1R7A8W/StOneu4WWUvaWIRsURVCmV1kCBUSGKAKCWFyAAi4ERKYLAcWBqOBAUZZsyl4tq3TRvUeaNk3uH5WU0BYotqaF3+d58tybc8573pO3Gn85U2EwGAwIIYQQQoh7mtLcDRBCCCGEEOYnQaEQQgghhJCgUAghhBBCSFAohBBCCCGQoFAIIYQQQiBBoRBCCCGEQIJCIYQQQgiBBIVCCCGEEAIJCoUQQgghBBIUClGmNWvWoFAoCAsLKzO/T58+BAYGVmkb9u3bx+zZs8nIyKjS+1QXf/31F23atMHOzg6FQsGPP/5YZrmdO3eiUCjYuHFjmfnPPfccCoWiCltaMd27d0ehUBhf1tbWNG7cmLfeeouCgoI7qvPs2bPMnj2bK1eulMobNWpUlf+zKYS4O0lQKEQ1tW/fPubMmXNPBIUGg4FBgwZhaWnJ5s2b2b9/P926dTN3sypNUFAQ+/fvZ//+/Xz33XfUq1eP1157jeeee+6O6jt79ixz5swpMyh87bXX+OGHH/5li4UQ9yKVuRsghBBXr14lLS2NgQMH0qNHD3M3p0IMBgP5+fnY2NiUW8bGxob27dsb3/fu3ZvGjRvzxRdf8OGHH2JtbV1p7albt26l1SWEuLdIT6EQlcRgMLB8+XJatmyJjY0NLi4uPPHEE1y+fNmk3LZt2+jfvz/+/v5YW1sTHBzM+PHjSUlJMZaZPXs2M2bMAKBOnTrGocedO3cCEBgYSJ8+ffj5559p1aoVNjY2NGrUiJ9//hkoHv5u1KgRdnZ2tGvXrtQweFhYGEOGDCEwMBAbGxsCAwMZOnQoUVFRJuWuDaNv27aN0aNH4+rqip2dHX379i31ucqzZ88eevTogYODA7a2tnTs2JFffvnF5LP6+/sDMHPmTBQKRaUPf3733Xfcf//9ODk5YWtrS1BQEGPGjDEpk5WVxfTp06lTpw5WVlb4+fkxZcoUcnNzTcopFAqee+45Vq5cSaNGjVCr1XzxxRcVao9KpaJly5YUFBSY9ATfzt9lzZo1PPnkkwA88MADxn821qxZA5Q9fHytzevWraNRo0bY2trSokUL4z8v1/vpp59o3rw5arWaoKAglixZwuzZs0sNyd/OMxVC1CzSUyjETRQVFaHT6UqlGwyGUmnjx49nzZo1TJ48mXfeeYe0tDTmzp1Lx44dOXHiBF5eXgBcunSJDh06MHbsWJycnLhy5QoffPABnTt35tSpU1haWjJ27FjS0tJYunQpmzZtwsfHB4DGjRsb73fixAlCQ0N55ZVXcHJyYs6cOTz++OOEhoby119/MX/+fBQKBTNnzqRPnz5ERkYae7OuXLlCgwYNGDJkCK6ursTHx7NixQratm3L2bNncXd3N/lsTz/9NA8//DBfffUVMTExvPrqq3Tv3p2TJ0/i7Oxc7vPbtWsXDz/8MM2bN+fTTz9FrVazfPly+vbty4YNGxg8eDBjx46lRYsWPP744zz//PMMGzYMtVpd4b9Vefbv38/gwYMZPHgws2fPxtramqioKLZv324sk5eXR7du3YiNjWXWrFk0b96cM2fO8Prrr3Pq1Cn+/PNPk6Doxx9/5O+//+b111/H29sbT0/PCrcrMjISZ2dnPDw8jGm383d57LHHmD9/PrNmzWLZsmXcd999wK17CH/55RcOHz7M3Llzsbe3591332XgwIFEREQQFBQEwNatW3n88cfp2rUr33zzDTqdjvfff5/ExMQKP1MhRA1kEEKU8vnnnxuAm74CAgKM5ffv328ADAsXLjSpJyYmxmBjY2N46aWXyryPXq83FBYWGqKiogyA4aeffjLmvffeewbAEBkZWeq6gIAAg42NjSE2NtaYdvz4cQNg8PHxMeTm5hrTf/zxRwNg2Lx5c7mfV6fTGXJycgx2dnaGJUuWlHoOAwcONCm/d+9eA2B46623yq3TYDAY2rdvb/D09DRkZ2eb3Ktp06YGf39/g16vNxgMBkNkZKQBMLz33ns3rc9gMBh27NhhAAzfffddmfmTJk0yXP/V9v777xsAQ0ZGRrl1LliwwKBUKg2HDx82Sd+4caMBMPz666/GNMDg5ORkSEtLu2VbDQaDoVu3boYmTZoYCgsLDYWFhYb4+HjD66+/bgAMK1euvOm15f1dvvvuOwNg2LFjR6lrQkJCTP7ZvNZmLy8vQ1ZWljEtISHBoFQqDQsWLDCmtW3b1lCrVi2DVqs1pmVnZxvc3Nwq/EyFEDWPDB8LcRNr167l8OHDpV6dO3c2Kffzzz+jUCgYPnw4Op3O+PL29qZFixbGYV+ApKQkJkyYQK1atVCpVFhaWhIQEADAuXPnbrttLVu2xM/Pz/i+UaNGQPFqV1tb21Lp1w9B5uTkMHPmTIKDg1GpVKhUKuzt7cnNzS2zDU899ZTJ+44dOxIQEMCOHTvKbV9ubi4HDx7kiSeewN7e3phuYWHBiBEjiI2NJSIi4rY/751q27YtAIMGDeLbb78lLi6uVJmff/6Zpk2b0rJlS5O/3yOPPGIybH/Ngw8+iIuLy2234cyZM1haWmJpaYmPjw9z584lNDSU8ePHm5Sr6N+lIh544AEcHByM7728vPD09DT+c5Gbm0tYWBgDBgzAysrKWM7e3p6+ffua1HU7z1SI6mL37t307dsXX1/fm+5sUJ6dO3fSv39/fHx8sLOzo2XLlnz55Zelyu3atYvWrVtjbW1NUFAQK1eurKRP8N+RoFCIm2jUqBFt2rQp9XJycjIpl5iYiMFgwMvLy/gf/2uvAwcOGOcL6vV6evbsyaZNm3jppZf466+/OHToEAcOHABAo9HcdttcXV1N3l/7D3l56fn5+ca0YcOG8dFHHzF27Fh+//13Dh06xOHDh/Hw8CizDd7e3mWmpaamltu+9PR0DAaDcej7er6+vgA3vb48KlXxrJeioqIy83U6nbEMQNeuXfnxxx/R6XSMHDkSf39/mjZtyoYNG4xlEhMTOXnyZKm/nYODAwaDwWS+J1DmZ7qZunXrcvjwYQ4dOsR3331HixYtWLBgAV9//bVJuYr+XSrCzc2tVJparTbWe+3vdW2aw/VuTLudZypEdZGbm0uLFi346KOP7uj6ffv20bx5c77//ntOnjzJmDFjGDlyJFu2bDGWiYyM5NFHH6VLly4cO3aMWbNmMXnyZL7//vvK+hj/CZlTKEQlcHd3R6FQ8Pfff5c5H+5a2unTpzlx4gRr1qwhJCTEmH/x4sX/rK2ZmZn8/PPPvPHGG7z88svGdK1WS1paWpnXJCQklJkWHBxc7n1cXFxQKpXEx8eXyrt69SpAqbmLt+NagFJe71RcXFypIKZ///70798frVbLgQMHWLBgAcOGDSMwMJAOHTrg7u6OjY0Nn332WZl13tjOiu6DaG1tTZs2bYDiXrYHHniAJk2aMGXKFPr06YO9vf0d/V0qk4uLCwqFotT8QSj773+rZypEddG7d2969+5dbn5BQQGvvvoqX375JRkZGTRt2pR33nmH7t27AzBr1iyT8pMnT+b333/nhx9+MPair1y5ktq1a7N48WKguEMhLCyM999/n//9739V8rmqgvQUClEJ+vTpg8FgIC4ursyexWbNmgElwcSNgeOqVatK1XmtzL/tIbqRQqHAYDCUasMnn3xSbu/bjUMl+/btIyoqyvilWRY7Ozvuv/9+Nm3aZPIZ9Ho969evx9/fn/r161e4/fXq1SMgIIDvvvuu1IKf5ORkduzYwUMPPVTmtWq1mm7duvHOO+8AcOzYMaD473fp0iXc3NzK/PtV9mpoNzc33n77bRITE1m6dClQsb9LVfyzYWdnR5s2bfjxxx9NNtXOyckpc5Xy9W0p65kKUVOMHj2avXv38vXXX3Py5EmefPJJevXqxYULF8q9JjMz02RUZv/+/fTs2dOkzCOPPEJYWBiFhYVV1vbKJj2FQlSCTp06MW7cOEaPHk1YWBhdu3bFzs6O+Ph49uzZQ7NmzZg4cSINGzakbt26vPzyyxgMBlxdXdmyZQvbtm0rVee1QHLJkiWEhIRgaWlJgwYNTOaF3QlHR0e6du3Ke++9h7u7O4GBgezatYtPP/203JXEYWFhjB07lieffJKYmBheeeUV/Pz8ePbZZ296rwULFvDwww/zwAMPMH36dKysrFi+fDmnT59mw4YNd3zyyPvvv8+gQYPo0aMHzzzzDN7e3ly4cIG3334bKysrXnvtNWPZ119/ndjYWHr06IG/vz8ZGRksWbIES0tL4wbZU6ZM4fvvv6dr165MnTqV5s2bo9friY6O5o8//uDFF1/k/vvvv6O2lmfkyJF88MEHvP/++0yaNKlCf5emTZsCsHr1ahwcHLC2tqZOnTplDhFXxNy5c3nsscd45JFHeOGFFygqKuK9997D3t7epLfydp6pEDXBpUuX2LBhA7GxscZpLdOnT2fr1q18/vnnzJ8/v9Q1Gzdu5PDhwyY/5hMSEkqNUHh5eaHT6UhJSanwlBNzkZ5CISrJqlWr+Oijj9i9ezdDhgzhscce4/XXXyc3N5d27doBYGlpyZYtW6hfvz7jx49n6NChJCUl8eeff5aqr3v37oSGhrJlyxY6d+5M27ZtOXLkSKW09auvvuKBBx7gpZde4vHHHycsLIxt27aVmit5zaeffkpBQQFDhgxh8uTJtGnThp07d5aav3ijbt26sX37duzs7Bg1ahRDhgwhMzOTzZs3M3jw4Dtu/xNPPMG2bduwtLTk2WefpWfPnsyePZtOnTpx6NAhk+1Z7r//fhISEpg5cyY9e/Zk3Lhx2NjYsH37dpo0aQIU95L9/fffjBo1itWrV/PYY48xaNAgPvzwQ/z9/avk2DilUsnbb79NWlqaccjpdv8uderUYfHixZw4cYLu3bvTtm1bk/lNd6pXr158//33pKamMnjwYKZNm8bAgQPp37+/SWB6O89UiJrg6NGjGAwG6tevj729vfG1a9cuLl26VKr8zp07GTVqFB9//HGpf9Zv/JF7bSSjOh27eSsKw43jL0II8Y81a9YwevRoDh8+bJwTJ+4thYWFxpXuf/zxh7mbI8S/olAo+OGHHxgwYAAA33zzDU899RRnzpzBwsLCpKy9vb3JIrtdu3bRp08fFi5cyLhx40zKdu3alVatWrFkyRJj2g8//MCgQYPIy8vD0tKy6j5UJZLhYyGEEEbXNir38fEhISGBlStXcu7cOZP/2Alxt2jVqhVFRUUkJSXRpUuXcsvt3LmTPn368M4775QKCAE6dOhQqrf+jz/+oE2bNjUmIAQJCoUQQlwnOzub6dOnk5ycjKWlJffddx+//vpruYt3hKjucnJyTHZ4iIyM5Pjx47i6ulK/fn2eeuopRo4cycKFC2nVqhUpKSls376dZs2a8eijj7Jz504ee+wxXnjhBf73v/8ZV+NbWVkZp9BMmDCBjz76iGnTpvHMM8+wf/9+Pv300xq3TZMMHwshhBDirrVz504eeOCBUukhISGsWbOGwsJC3nrrLdauXUtcXBxubm506NCBOXPm0KxZM0aNGlXm+ebdunUz2dh+165dTJ06lTNnzuDr68vMmTOZMGFCVX60SidBoRBCCCGEkNXHQgghhBCimswpLCoqIiUlBYVCgZubW6kVQEIIIYQQomqZtafwhx9+oFOnTtja2uLr64uPjw+2trZ06tSpwgdWCyGEEEKIO2e2OYWrVq1i8uTJjBkzhkceeQQvLy8MBgNJSUn8/vvvfP755yxdupRnnnmmwnX/YtmgCloshBBCiKr0WGGE2e5dlbGDOT9XRZgtKAwODiY0NJSnn366zPzPPvuMefPmlbmj+K1IUCjEzdV9aRzeA3ti3yCIIk0+6fuPET7rfXLPR970uoCJwwicOBybQD800fFcfHsFcet/MinjPbAn9We/gG3d2uRdiibi9UUk/lRyYkvt8UMJGD8UmwA/AHLOXuDCW8tJ/n23sYyFnS0N57+IV7+HsHJzRnMljshl64heVbK9g9rLnYbvvIR7j46oHOzIPR/JxbdXkbDp98p4RKUoVCoazJ2CR++u2NaphS4zh5Tt+wiftRBtfJKxnNLKkkbvzsR3cB+UNmpStx/g9POzyY9LrJJ2CXE3kaDQvMw2fBwXF0fnzp3Lze/YsSNXr179D1skxL3DtWs7olZ8yd7OgzjYezQKlQXtfv0UC1ubcq+pPX4oDd56kfNvLmVXi8c4P/dDmn74Bp6PlWz14Ny+Ja2+WkTclz/xd+v+xH35E/dtWIxzu+bGMvmxCYTPep+97f/H3vb/I3XHAdpsWoZ942BjmcYLQ/Ho2YXjITPY1exRLn+4hiaLX8Wrbw9jmRZr3sW+fh3CHp/I7lZ9SfhhG/d9tQjHlo3u+Lk0/3QB9V57rsw8C1trHFs15uK8Fexp9zhHBj2HXb1A2vywwqRc4w9ewav/wxx9air7uw/Dwt6WNj+tAqWs6xOiOlNYKqrsVVOY7VuqSZMmrF69utz8ss4VFEJUjsN9xhK79gdyzl4k+2QEJ8eGYhvgh9N95f875/9UP6I//ob4735DExlL/Le/EvP5RurOKJniUef5EFL+3Meld1eTG3GZS++uJmX7AQKfDzGWSfplB8lbd5N74Qq5F64Q8fpidDl5uNzf0ljG5f6WxK77kbTdh9BExRHzybdknwzHqXXTkjLtW3Jl2XoyD59CExnLxQUrKMzIwqlVyWdQ+3rS6stF9Ew6xMMJB2j9/XJjD2VF6bJyONR7DPEbfyP3fCQZB09wZspbOLduinWt4sPuVY721Br9P8699Dap2/eTdfwcx0Nm4Ni0Pu49Ot7RfYUQ/w2lSlFlr5rCbKuPFy5cyGOPPcbWrVvp2bMnXl5eKBQKEhIS2LZtG1FRUfz666/map4Q9xSVkwMABemZ5ZZRqq3Q52tN0oo0+Ti3bYZCpcKg0+HSviWRH64xKZOy7W+ToNC0UiU+T/TCws6W9APHjMlp+47i1fdBYtZsRHs1Cbdu92NXrw7J0+aXlNl7FJ8ne5P0604KM7LwebI3SrUVqbsOFldtY037bWtJ33uE/Q8Ox6DTETzrWdr9/Am77+uHobCwIo+oTCpHewx6PbqMLACc7muK0sqK5G17jWW08Ulkn7mAS4dWpGzb86/vKYQQVcVsQWG3bt04ffo0K1as4MCBA8ZjY7y9venTpw8TJkwgMDDwlvVotVq0WtP/UBUa9FgqZKhGiNvV+L1Q0vaEkXPmQrllkv/YQ60xT5Cw+U+yjp7BqXVTao36H0orK6zcXdAmJKP2dkebmGpynTYxFbW3h0maQ9P6dPz7a5TWaopy8jjyxCRyzpXMHz4z5S2ar3qTh6L+Rl9YiEFv4NT4V0nfe8RY5tiwKbT6ajE9kw6hLyykKC+fI088R97lGAB8Bz8GegMnx71ivObE06E8knIYt27tSPmzJHC7E0q1FQ3nT+fq1z+jy84FQO3tTpG2wBgkljyDFNTe7v/qfkKIqqWwlLjBrPsUBgYG8s477/yrOhYsWMCcOXNM0oYqXHnKQr6AhbgdTT58HYdm9dnffdhNy12Ytxy1twed9nwDCgUFianErv2BujOewVBUVFLwxrVrCkWptJyISP5uMwBLZ0e8B/akxWfvcKDHcGNgWOe5ETi3a8nhARPQRF/FtUsbmi59g/z4JFK37wegwdwpWLo4cqBnCAWp6Xj3e4j7vl7C/geeIvv0eZzua4JtcG0eST9qcm+ltRrburXhz734Du1Ls+Ul3x9KtRUYDARNG2NMO/XsG1zdYHrQvUKlotWXi1AoFZx+bvZNn1vJM7h1MSGEMKdqsXn1vxEaGsq0adNM0ra7tjZTa4SoWZosfhWvPg+y/8Hht1wdq8/XcvKZWZya+DpqLzfy45Op/cxgCrNyKEhJB0CbULpHTO3pijYxxSTNUFhI3qVoADKPnMa5TTMCnx/J6WffQGmtpsFbUznyxHMk/bYLgOxTETi2aETQtKdJ3b4f26BaBE4awa4Wj5Fztvig++yTEbh2bkPAxKc4PekNFEolmUfPcHzk9FKfpSA5DYDELdvJOHTCmN5w/nTyryZy5aN1xrQbez4VKhX3bViMbR1/DjwcYuwlvPb5LdRWqJwdTXoL1Z5upO8/hhCi+qpJc/+qSrUNCkNCQoiJiWH79u03LadWq1Gr1SZpMnQsxK01WfIa3v0fZv9DI9Bcib3t6ww6nTGA9B30KEm/7DD2BKYfOI57j05ELik5PN79oc63DogUiuJeOkBpqUJpZYVBb9q1ZigqQqEs/tI2rpLW68stk3nsDD5P9qYgKdUkcLteUU4ueTklebqcXArTMo0Ba6lm/hMQ2gUHcODhkRSmZZjkZx49jb6gAI+HOhG/8TcA1N4eODSpx7mX37v5MxBCCDOrtkGhr68vStnCQYgq0XTpG/gO6UPY489SlJ2L2qu4d68wM9u4mKTBW9Ow9vPixOiZANjVC8S5bXPSD53A0sWRoBdG49CkHifGvGys98pHa2m/fT1B058hcctfePXtgXuPDiZD0w3enErS1t3kxyagcrDDd9CjuHVrx6HHxgKgy84ldddBGr09gyJNPproq7h1bYv/8AGcnfE2ADnhl8m9cIWmy+dybuY7FKZm4NXvIdwf6sTh/uMBiPtqC0HTnqbNphVEzF5CflwiNrV88B7Yk8sLP6nwvoEKCwvu++ZDnFo15vCA8SgsLIzPrSAtE0NhIbqsHGI+/55G786kIDWdwvRMGr0zk6zT50n5a9+d/KmEEP+RmrR1TFWptkHhggULzN0EIe5aAROKg7QO29ebpJ94+mVi1/4AgNrHA5t/tloBUFgoqTN1NM3q10FfqCN150H2dR2KJirOWCZ9/zGOPTWNBnOm0GDOZPIuxXBs2FQyDp00llF7udNyzbuofTzRZWaTfSqCQ4+NNQmajj01jQbzptFq7ftYujqhibpKxOuLjJtXG3Q6DvUbR8N5L9L2h5VY2NuSdymaE2NeJnlr8SbYek0+Bx4cTsMF02n93UeoHOzIj0skdcd+dFk5FX5m1v7eePcr3iex65HNJnn7e4wgbfchAM6+OB+DTsd9GxZjYWNNyvb9nHj65VK9mkIIUd2Y7UQTgNjYWFasWMG+fftISEhAoVDg5eVFx44dmThxIv7+/ndUr5xoIoQQQtQ85jz5Y3tg81sXukMPXjl560LVgNl6Cvfs2UPv3r2pVasWPXv2pGfPnsazj3/88UeWLl3Kb7/9RqdOnczVRCGEEELcI2T42Iw9hW3btqVz584sWrSozPypU6eyZ88eDh8+XOG6O/fd9W+bJ4QQQoj/2J4t3cx27x31WlRZ3Q9cOHHrQtWA2XoKT58+zfr168vNHz9+PCtXrvwPWySEqEzDn6jFhJAgvv0plg8/Kd5/0MZayYSQILq0d8fJQUV8Uj4bt8Tx42/xxuv6PeLDw908qV/XHjtbFb2G7CEnt8ikbgc7FS+MD6ZzOzcA9hxKZfGqC6XK9e7hxeD+/tTysyUnV8fOvcksWlW8hc2YoQGMGRZYqt2a/CIeflJOHhHiXiNb0pgxKPTx8WHfvn00aFD2/L/9+/fj4+NTZp4QonprWM+Bfr18uBhpuqDj+bHB3NfMmTcXniM+KZ92rVyZNrEeKWkF7DlYvB+gWq3k4NE0Dh5NY0JIUJn1vzGjER5uVrz4xikAXnquHq9Na8TMN08bywzu78+Qgf4s//wyZyKyUFsp8fWyMeZv+CGGH3+7alLvknktOHchu1KegRBC1DRmCwqnT5/OhAkTOHLkCA8//HCps48/+eQTFi9ebK7mCSHukI21kjdebMi7S88TMjjAJK9pQ0d+257AsdPFZyxv/j2e/r18aBjsYAwKv9tcvJq5VVOnMusP8LelfWtXxr14lLPniwO4dz86z6r376OWnw0xcRoc7FQ8MyKQmXNPc+RkhvHayOg84//X5OvR5JesCA4OtKNObTveW1b+UX9CiLuXwkJ6Cs0WFD777LO4ubmxaNEiVq1aRdE/x2RZWFjQunVr1q5dy6BBg8zVPCHEHZo2oR77wtIIO5FRKig8eTaTzve78cu2BFLSCmjVzJlavjYsOZZ22/U3behIdo7OGBACnInIJjtHR7OGjsTEaWjbygWFQoGHm5r1y9tga6PidHgmH316maQUbZn19unpQ3RsHifPZt7ZBxdCiBrOrPsUDh48mMGDB1NYWEhKSvExWO7u7lhaWpqzWUKIO9Sjiwf169rzzLSjZeYvXn2Rmc/V58cvOqDT6dEb4J2lEZw8m1Vm+bK4uliRkVlQKj0jswBXl+JTUXy9rVEqYMSg2ixZfZHcPB3PDK/DojebE/J8GDqd6fo6S5WCnt09Wb8xpgKfVghxN1FKT2H12Lza0tJS5g8KUcN5uqt54Zlgpr1+koLCsjc1eLKvH00aODJz7mkSkvNp0cSJFyfUIzWtgLATGbd9rzL3TLju+1yhUGBpqWTx6oscPlZ8LvPs987x09oO3NfMmUP/pF3TraM7tjYWbN2ecNttEEKIu021CAqFEDVfg2B7XF2s+GRxa2OaykJBiyZOPN7Hj16D9zBuRB1mzT/D/rDi4eJLV3KpF2TP0IG1bjsoTEsvwMXZqlS6s6MVaenFPYipacVDxFeiS841zsgqJDOrEC8Pdalr+/T0Yd/hNNIyCm/78woh7i7Xzk2/l0lQKISoFGEnMhgxyXRf0VlTGhAVq+HLjdEolcW9dzf28un1BhQVOOb8dHgWDvYqGtVzMK4UblzfAQd7FafCi4ehT50r/t/afrYkpxYHig72KpwcLUlINp1T6ONlzX3NnHn5rdMIIe5dCosKfBHdpSQoFEJUCo2myGR1L0B+vp6srEJj+rFTGTw7OgittoiEZC0tmzrR6wEvln56yXiNq7Mlri5W+PkWbx8TFGBPnkZHYrKW7BwdUbF5HDiSxszn6/PesvMAzJhUn72HUomJ0wAQc1XD7gMpvDAumHc/Ok9uno4JIUFEx+Vx9LrVyACPPeRNanoBB47c/mIXIYS4G0lQKIT4z7zx7lnGhwTx+vRGONqrSEjWsnrdFZPNqwf09jXZVHr5Oy0BmLc4nN/+SgRgzvvnmDIumA/mFp9VuudgKotWmW4l89YH4UweW5f33miKXg/HT2fw4hunKCoq6apUKIo3uP7trwT0eoQQ9zBZaGLGY+6qkhxzJ4QQQtQ85jzm7sD97aqs7vYHD1VZ3ZXJ7APon3zyCSEhIXz++ecAfPPNNzRq1IigoCDeeOMNM7dOCCGEEPcChVJRZa+awqzDx4sXL+bVV1/lkUce4ZVXXuHq1assWrSIqVOnotfrWbhwIX5+fowbN86czRRCmJmFEsYMC+Th7p64OVuRml7Ar38l8sU3UWVvTyOEEKLCzBoUrlq1itWrVzNs2DCOHTtGu3btWLlyJU8//TQA/v7+LFu2TIJCIe5xTz1Rm/69fZm3KJzI6FwaBjsw64UG5Obq+G5LnLmbJ4S4C8icQjMPH0dFRdG5c2cAWrVqhYWFBe3btzfmd+nShUuXLpV3uRDiHtGkoSN7DqSwPyyNhCQtO/elcOh4Og3qOZi7aUIIcdcwa1Boa2tLbm7J5rIeHh7Y29ublNHpdP91s4QQ1cyps5m0buFCrX+2qQkOtKN5IycOhKWauWVCiLuFwkJRZa+awqzDxw0bNuTkyZM0atQIgJgY03NHw8PDCQwMNEPLhBDVyfqNMdjZqvhyRVv0egNKpYLV6yL5c3eyuZsmhLhLKJRmX3trdmYNCt955x3s7OzKzY+Ojmb8+PE3rUOr1aLVmp5QoC8qQGlR+hgsIUTN1KOLBz27ezLn/XNERudRL8iOyWODSUkrYOv2RHM3Twgh7gpmDQo7dep00/xnn332lnUsWLCAOXPmmKTVqhdC7Qaj/1XbhBDVx7Ojg/hyYwx//V3cM3g5KhdvD2tGPFlbgkIhRKWoSVvHVJUa31caGhpKZmamycs/+ClzN0sIUYms1Rbob9h7pkhvQL7DhRCi8lTrY+5CQkKIiYlh+/bt5ZZRq9Wo1WqTNBk6FuLusvdwKiMHBZCYrCUyOpf6QfYMHuDPr9sSzN00IcRdQrakqeZBoa+vL0qZ+CnEPW/Rqos881QgL06sh4uTJSlpBWzeGs/nX0eZu2lCCHHXkLOPhRBCCFEtmPPs4xO9ulZZ3S227q6yuitTte6Gi4mJYcyYMeZuhhBCCCHEXa9aB4VpaWl88cUX5m6GEEIIIe5yCqWyyl41hVnnFG7evPmm+ZcvX/6PWiKEqEoDevswoLcvPl7WAERG57Hm6ygOHEkDYMzQAHp09cTTXY1OpyfiYg6r10Vy9ny2sY5+j/jwcDdP6te1x85WRa8he8jJLbrpfccMDWDMsECTtNT0AvqP3F+5H1AIUePJljRmDgoHDBiAQqHgZtMaFQr5IwlR0yWnFLDyi0ji4jUA9O7hxYJXmjBmyhEio/OIuaph0coLXE3IR61WMqi/Px/Mbc6QcYfIyCoEQK1WcvBoGgePpjEhJOi27305Kpcpr54wvtfrK/ezCSHE3cKsQaGPjw/Lli1jwIABZeYfP36c1q1b/7eNEkJUur2HTc8oXr3uCgN6+9K4gSOR0Xls25Vkkr/0k0v07elD3UA7jpzMAOC7zXEAtGrqVKF7FxUZSMsovPPGCyHuCbIljZnnFLZu3ZqjR4+Wm3+rXkQhRM2jVBYfW2dtbcGZ8KxS+SqVgv69fMjO0XHxSs6/vp+/rw0/rmnPt5+0Y/aMRvj+M4QthBDClFl7CmfMmEFubm65+cHBwezYseM/bJEQoqoEBdix8r1WWFkp0WiKmDXvDFdi8oz5Hdu6MntGY6zVSlLTC5j6+kkys3T/6p5nz2fz1qJwYuI0uDpbEjI4gBXvtWLEpMNkZf+7uoUQdxeZUyj7FAoh/iMqlQIvDzX2diq6d/SgT09vng89YQwMrdVK3FytcHa0pG9PH+5r4cy4F4+RkWk69NuqqRNLF7S8rYUmN7JWK/nm4/v56vsYvvkpttI+mxCicphzn8KzA3tUWd2Nf/iryuquTDVnnbQQokbT6QzExecTcTGHVWsjuRSZy5P9/Iz5+Vo9cfH5nInI5u2l5ykqMtDnYe9KbUO+Vs/lK7n4+9pUar1CiJpPtqSRoFAIYS4KsLQs/ytIgQKrm+TfCUuVgoBatqSmF1RqvUIIcTeo1mcfCyHuDuNG1OHAkTSSUvKxtVHxUFcPWjV15sXZp7BWKxk5KIC9h1JISSvAydGSgY/64uGuZsfeZGMdrs6WuLpY4fdPL19QgD15Gh2JyVqyc4rnBy5+qzm796ew6ZerAEwaE8TeQ6kkJmtxcSqeU2hna8FvfyX89w9BCFGtyZxCCQqFEP8BV2dLXpvWEDdXK3JzdVy6ksuLs08RdjwdK0sFAf429O7RBCdHS7KyCjl3IZtJLx8nMrpkIcqA3r4mG1Evf6clAPMWh/PbX4kA+Hnb4OxoaSzj4aZm9vRGODlakpFVyJmILMZPP0ZisvY/+dxCiJpDgkJZaCKEEEKIasKcC00iBj9SZXU3+Ob3Kqu7MlXLnsLExEQMBgPe3pU7yVwIIYQQoizSU2jmhSZpaWn873//IyAggEmTJlFUVMTYsWPx8fHBz8+Pjh07Eh8fb84mCiGEEELcE8zaUzh9+nTOnz/PjBkz2LhxI0888QSXL1/m77//RqlU8sILL/Dyyy/zxRdfmLOZQohbGNDbhwG9ffH557SQyOg81nwdxYEjaQDMmtKAR3uY9vyfCc9i/Ixjxvf9HvHh4W6e1K9rj52tqtQ+hNf2JyzL2GlHCb+QDUDDeg5MCKlDg7oOgIFzF7JZ/vllLkaWv1H+0vktaNXM2STtz91JzH7v3O0+AiFEDVeTto6pKmYNCrdu3crGjRvp2LEjTz75JD4+Pvz+++906tQJgEWLFjF48GBzNlEIcRuSUwpY+UUkcfEaAHr38GLBK00YM+WIcbHIgSNpzF8cbrymUGc6nVmtVnLwaBoHj6YxISSo1D1OhWfRb8Q+k7Sxw+vQpqWzMSC0sbHggznN+PtgKgtXXEBloWDMsEA+mNOcgaMPUFRU/hTqzVuv8smXV4zvtQX6ij0EIYSo4cwaFGZmZuLnV7x5rZeXFyqVCh8fH2O+r68vGRkZZmqdEOJ27T2cavJ+9borDOjtS+MGjsagsKBQT1pGYVmXA/Dd5jiguEewLDqdweR6CwsFndu58f0vcca02n42ODpY8umXV0hKKV5h/PmGKNZ+1AYvDzVXE/LLvX++9ubtE0Lc3ZQWMqfQrH2l9erV4+effwbgt99+w9ramj/++MOY//vvv1OnTh1zNU8IcQeUSujRxQNrawvOhGcZ01s1dWbLug5sWNmWl56rj7OT5U1qubXO97vh5Ghp3I4GIDpOQ3pmAX0e9kalUmBlpaTPw95cjsolMan8gBDg4e6e/PxlR9Yta8OkMUHY2Fj8q/YJIURNY9aewhkzZhASEsLixYuJjY1l/fr1TJ48mYMHD6JUKtm0aRMffPDBTevQarVotaZ7jumLClBaWFVl04UQNwgKsGPle62wslKi0RQxa94Z47nGB8LS2LEnmYSkfHy9bBg7PJAP57Xg6SlHSg0j364+D3tz6FiasUcQQKMpYvKsEyx4pSkhgwMAiLmax4tvnKLoJqPBf+xMJD4xn9T0AoIC7BgfUofgQHumvn7yjtomhKh5ZPWxmYPCp556ioCAAA4ePEjHjh3p0KEDjRo14u233yYvL4/Vq1cTEhJy0zoWLFjAnDlzTNJq1QuhdoPRVdl0IcQNouPyGP1CGPZ2Krp39OCVqQ14PvQEV2Ly2L6n5GSSyOg8wi9ms/HT++nQ1o3d+1MqfC8PNyvatXLl9XfPmqRbWSkJndyAU+cymf3+OSyUMGRgLd57oxljpx2loJx5glv+KDnhJDI6j9irGj5d3Jr6de05fymnwu0TQtQ8stCkGuxT2LlzZzp37mx837hxY9auXXvb14eGhjJt2jSTtF5DDlZa+4QQt0enMxAXXzxEG3Exh0b1HHiynx/vLbtQqmxqegEJyfnU+ufIuop69CFvsrIL2XPQdC7jw9088fa0ZvyMY1zbln/O++f4bUMnutzvxl9/J5dRW2kRl3IoLNTj72MjQaEQ4p5h9qDw31Kr1ajVapM0GToWohpQgKVl2b+8HR1UeLpbk5pWcEdVP/aQN1t3JJZaTWytVqI3GLj+nCaDvvi9sgJDQ3Vq22JpqSQ1/c7aJ4SoeWT42MwLTW4lJCSEBx980NzNEELcwrgRdWje2AlvTzVBAXaMGxFIq6bO/LEzCRtrJZPGBNGkgSPenmpaNXXindeakplVyK4DJUPHrs6WBNexw++f3sOgAHuC69jhYG/627V1c2d8vW34+boh32sOH0/Hwd6SFycGE+BvS53atoROaUhRkYGjJzMAcHe14ssVbWlUzwEAX29rRg0JoEGwPd6eatq3duXNlxsTcSmbU+cyq+iJCSFE2RYsWEDbtm1xcHDA09OTAQMGEBERcdNrdu7ciUKhKPUKDw+/6XU3qtY9hb6+vihljF+Ias/V2ZLXpjXEzdWK3Fwdl67k8uLsU4QdT8fKSklQgB29HvDC3k5FanoBR09l8Ma759BoSjanHtDblzHDAo3vl7/TEoB5i8NNVhj36enNybOZRMXmlWpHdKyGmW+eZszQAFa+1wqDwcD5yzlMn33S2OunUikI8LfFWl383aLTGWjdwpkn+/phY2NBUrKW/WGpfLYhCr1sVSjEPaO69BTu2rWLSZMm0bZtW3Q6Ha+88go9e/bk7Nmz2NnZ3fTaiIgIHB0dje89PDwqdG+FwWC4s6V/1VjnvrvM3QQhhBBCVNCeLd3Mdu+ocQOqrO6A1T/e8bXJycl4enqya9cuunbtWmaZnTt38sADD5Ceno6zs/Md36tad8PFxMQwZswYczdDCCGEEHc5hVJZZS+tVktWVpbJ68bt9MqTmVk8jcXV1fWWZVu1aoWPjw89evRgx44dFX4G1TooTEtLk3OPhRBCCFGjLViwACcnJ5PXggULbnmdwWBg2rRpdO7cmaZNm5ZbzsfHh9WrV/P999+zadMmGjRoQI8ePdi9e3eF2mnWOYWbN2++af7ly5f/o5YIIVo0cWLY47VoUNcedzc1ofNO8/eB1Jte83A3T576Xy38fW3IydVx8Gg6yz67RFa2DoCuHdwZ+WRt/HxsUKkUxF7V8PWPMfy+I6nM+oY/UYsJIUF8+1MsH35yyZju4mzJxFFBtGvpgr29ihOnM1m06iKx/5y1XFUGPurL0Mf9cXNRcyU6lyUfX+LkWdPFJwH+tkwcVYeWTZ1RKor3OXz93bMkJt9eL4AQonqoyjmFZW2fd+POKWV57rnnOHnyJHv27LlpuQYNGtCgQQPj+w4dOhATE8P7779f7pBzWcwaFA4YMACFQsHNpjUqFNVj4qcQdzsbawsuRubwy58JzJ/V5Jblmzd25NWpDVn66SX2HkrFw82K6c/W5+XnGzBr/hkAsrMLWfttFFGxGgp1ejq1dSP0hYakZxRy6Fi6SX0N6znQr5cPFyNL7wu44JWm6HR6Xp53htw8HUMG+LP4reYMf/Yw+do7Ww0yZmgA3l7WzF9c9qq+Bzt7MHlsXRauvMCps1n07+XD+7ObMWLSYWPA5+ttzfJ3WvLztgQ+/SqK3FwdAbVs0ZazSbYQovqqys2ry9o+71aef/55Nm/ezO7du/H396/wPdu3b8/69esrdI1Zh499fHz4/vvv0ev1Zb6OHj1qzuYJcU85cCSNj9dfue0TRpo0cCQhKZ+NW+KIT8zn5Nksftp6lQbB9sYyx05nsvtAKlGxeVxNyOe7LXFcupJD88ZOJnXZWCt548WGvLv0PNk5OpO8Wr42NG3oyMIVFwi/kE1MnIaFKy5gY23BQ908jeXsbC14aVI9tqzrwO/fdGLJW80JDrz5Sr2bGTLAn5+3JfDzHwlExebx4SeXSErJZ0BvX2OZcSPqsP9IGivWXObC5RyuJuazPyyNjMzCO76vEOLeZjAYeO6559i0aRPbt2+nTp06d1TPsWPH8PHxqdA1Zg0KW7dufdPA71a9iEII8zl1LgsP9+J9/aB4iLd7Jw/2h6WVe03r5s7U9rPl+BnTIdhpE+qxLyyNsBMZpa65tgH29b1vej0U6vQmweV7bzTD1cWK6XNO8fSUo5y/nMPieS1K7XN4O1QqBfWDHTh8zPSzHD6WTtNGxds9KBTQsY0rMXF5LJzTjC3rOrD6/VZ0ae9W4fsJIaoBhaLqXhUwadIk1q9fz1dffYWDgwMJCQkkJCSg0ZRMlwkNDWXkyJHG94sXL+bHH3/kwoULnDlzhtDQUL7//nuee+65Ct3brMPHM2bMIDc3t9z84ODgO1o9I4SoeqfDs5j7/jnmvtQIKyslKpWSvw+ksGjVRZNydrYW/LCmA1aWCor08MGKC4QdLxk67tHFg/p17XlmWtk/EKNi84hPzGdCSB3e++gCGm0RQwb44+6qxs2l+PSi+5o7ExRgR9/h+yjUFf+QXPbZZbrc784DnTzY/Ht8hT6bk6MlKgsFaRmmPX5pGYW4ORff08XJEltbFcOfqM3H6yNZseYy7Vu7Mi+0CZNfOcHx07LxtRCi4lasWAFA9+7dTdI///xzRo0aBUB8fDzR0dHGvIKCAqZPn05cXBw2NjY0adKEX375hUcffbRC9zZrUNilS5eb5tvZ2dGtm/n2LBJClC+wli1TxgXz+ddRHDqWjpuLFc+ODmLGs/V4e+l5Y7k8TRGjXwjDxtqCNi1ceO7pulxN0HDsdCae7mpeeCaYaa+fpKCw7FGBoiIDry44w8uTG/Db153QFRk4cjyd/WEli2Aa1LXHxtqCX77qZHKt2kqJn7c1AM0bO/H+7GbGPEuVAoUCuncs2dx13XfRrPuu5Iv2xoEKhQKuJV2blL7nYArf/hQHwMXIXJo2dGRAL18JCoWoYarL5tW3M0K6Zs0ak/cvvfQSL7300r++d7U+0UQIUX0Nf7I2p85lseGHWAAuXcklX3uB5e+04uP1V4wniBgMEBefDxQHTQG1bBn+ZG2OnT5Fg2B7XF2s+GRxa2O9KgsFLZo48XgfPx58fDd6PURcymH0C0ews7XAUqUkI6uQ1e+3IvxiNlB8rnFqegHPzzpeqp05ucVzFMMvZjP6hTBj+hN9/fBwU7NiTckuB9dWTWdmFaIrMuDmYmlSl4uTJWkZBSVldHquRJuerBIVk0ezG+ZMCiFETSBBoRDijlirlRQVmf6iLbp2at1NfnArAKt/5gmGnchgxKTDJvmzpjQgKlbDlxujSx0zl5tXBBTh72NDg2AHPv7yClAcNLq6WFFUZCAhqeytYAoK9MbgFCA7W4edrcok7RqdzsD5i9m0beXC7uu25WnT0oU9B1ONZc5dyKaWv63JtbX8bElMLl2nEKJ6q8rVxzWFBIVCCKB4BbCfj43xvY+XNcF17MjO0ZGYrGX8yDp4uFnx1qLiLVz2Hkpl5nP1GdDbh0NH03FztWLyM3U5G5FFalpxb9rwJ2oRfjGHq/EaVJYKOrR2o9eDXry/4gIAGk0RkTf0tOXn68nKKjRJf6CTOxmZhSQmawkKtOOFZ4L5+2AKh//Z1ibseDpnwrNY8EpTVqy5THRcHu6uajq0cWX3gRQiLpbe5uZWvv4xltemNST8Qg6nw7Po18sHLw9rfvztqrHMhk0xzHmpMSdOZ3D0VAb33+dKx3ZuTC6jx1IIIao7CQqFEAA0DHZg6YKWxveTxwYD8OtfCcxfHIGbqxVeHtbG/N/+SsTWxoL/9fHjuafrkpOj48jJDJPhWBtrC16cGIynmxptgZ6o2DzmLgxn+57kCrXNzVXNc0/XxdXZitT0ArZuT2TNN1EmZabPOcW4EYGEvtAAZ8fiYd7jpzNJz7iz7WG270nGydGSUUMCcHO1IjIqlxlzTplsSr37QCrvL7/A8CdrMWVcMNFxGl5dcIaTZ7Pu6J5CCPOpLnMKzUlhuAv3fOncd5e5myCEEEKICtqzxXyLS+NfHFZldfss/KrK6q5M1XoA/dy5cwQFBZm7GUIIIYS4yymUyip71RTVevi4oKCAqKioWxcUQgghhPgXZPjYzEHhjYdD3yg5uWLzjoQQ5vXdJ/fj42VdKn3TL3F8sLJ4U+sxQwPo94gPDvYqzp7P5oOVF0wWlfh6W/PcmLo0a+yIlaWSg0fTWLTqosncwPp17ZkYEkTDeg7o9QZ27Utm6aeX0OSXPnPY0UHFmg/b4OmupteQPeTkFhnzggLsmDohmMb1HMjK0fHT1njWfC0/RIUQ9yazBoVLliyhZcuWODo6lpmfk1PxFYNCCPN5ZtpRrh8pCQqwY/FbLdjxz8KSp/5Xi8ED/Jm3OIKYuDxCBgewaG5zhk48jEZThLVayaK5zbkYmcMLr5wEYOzwQN55rSnjpx/DYAA3VysWv9mcv/5O5oNVF7CzVTF5bF1mTWnIa2+fLdWmlyc34NKVHDzdTQ+jt7WxYNGbzTl2MoOxK45Sy8+WV6Y0ID+/iK9/jK26hySEqJakp9DMQWG9evWYOnUqw4cPLzP/+PHjtG7dusw8IUT1k5FlutJ3+BNuxF4tPr0E4Ml+fqz9Nprd+1MAmLconM3rOtKzmyc/bY2nWWMnvD2tGf3CEfI0xT16CxZH8NvXnWjd3JmwExl0auuGTmfgg5UXjCeOfLDyAms+bIOfj7XJvoMDevvgYKfi86+j6NDG9Ezint09sbJUMm9xOIU6A5HRedT2s2HwAH8JCoUQ9ySzzn5s3bo1R44cKTdfoVDc1nEvQojqR6VS0PMBL375MwEAXy9r3F3VHDpWcu5xoc7A8dMZNG1YPFpgpVJiAAoLS4aBtYV6iooMNP/nlBBLSwWFOr3JEXTaguLyza87SSSwli2jhgTw1qJwDPrS3yNNGzpy/HSG8axkgINH0/FwU5c5BC6EuMsplVX3qiHM2tKFCxcyZcqUcvNbtGiB/sYjDW6g1WrJysoyeemLCiq5pUKIiura3h17OxW//lUcFLq6WAEYj4m7Jj2jwJh3JiKL/PwiJo4KQq1WYq1WMml0EBYWCtxci8scPZmBm4sVQwf6o1IpcLBTMX5kHQDc/qnHUqVg9oxGLP/8ssm+gtdzdbEi/Ya2XGubq7NVZTwCIYSoUcwaFHp7exMQEPCv6liwYAFOTk4mr9iLX1ZSC4UQd+qxh705eCTNeLqJ0Y2ddgqFMS0jq5DX3jlLp3ZubPu2M1u/6YydnYqIi9no/+nti4zOY97iCIYMrMWfG7vw07oOXE3IJzW9wHgs3viQIK7E5PHHzqSbtrFUU8rNEULc7RQKRZW9aopqvSXN7QgNDS21irnXkINmao0QAsDLQ02bFi68suCMMS0t/Z9eOJfiU0mucXGyNOk9PHwsncHjDuHkqKKoyEBObhE/rS0O/K7ZtiuJbbuScHG2JD+/CIMBBvf3Jz5RA0Dr5s4EBdjRvZMHUBLs/fxlJ9Z+G8VnX0WRll5QqkfQxflab+adnYIihBA1WbUOCkNCQoiJiWH79u3lllGr1ajVpqsKlRYy9COEOT32kDfpmQXsP5xqTLuamE9Kmpa2LV24cLl4ZwGVSkHLps6s/OJyqToys3QA3NfcGRcnS/YcSi1V5to2NY895E1BoZ7Dx4vnK76y4Axqq5KBkEb1HJg1pSGTZh4nLqE4cDwdnsX4kXVQqRTo/plX2K6VC8mpWuIT8xFC3Ftq0ibTVaVaB4V+fn4o5Y8kRI2iUMCjD3mzdXsiRTdMCf5ucxwjnqxN7NU8Yq5qGDmoNlptEX/sKhnmfbSHF1GxeaRnFtK0oSMvPBPMtz/FEhOnMZZ5/DFfTodnodEU0balC8+OCWLlF5HGPQiv71UEcHa0BCAqNtdYZtuuJEYPDeSVKQ1Y+200tXxtGPFkbdmnUIh7lGxJU82Dwvnz55u7CUKICmrT0gVvT2t+2ZZQKu/L72NQWymZNrEeDvaWnD2fxdTXT6LRlGwoXdvflvEhQTjaq0hIymftt9F885PpFjGN6zvw9LBAbGwsiI7N471l5/l9x83nD94oN6+Iqa+dZNqEYD5Z1JrsnEK++TFWtqMRQtyzFIa7cM+Xzn13mbsJQgghhKigPVu6me3eqXPHVVndbq+vrrK6K5PZx2Y1Gg179uzh7NnSJxHk5+ezdu1aM7RKCCGEEOLeYtag8Pz58zRq1IiuXbvSrFkzunfvTnx8vDE/MzOT0aNHm7GFQgghhLgXKJSKKnvVFGadUzhz5kyaNWtGWFgYGRkZTJs2jU6dOrFz505q165tzqYJIe7Q8CdqMSEkiG9/iuXDTy6VW85SpWD00AB6dvfC1cWK5BQta7+NNp6AAmBvZ8G4EXXo2sEdB3tL4hM1fPTpZQ4cSTOWcXe1YuKoINq3dkWtVhITp+HtDyOIuFRydnqAvy0TR9WhZVNnlIrivQ5ff/csiclavD3VbPy0fZltfO3tM+zYm1IJT0UIIao/swaF+/bt488//8Td3R13d3c2b97MpEmT6NKlCzt27MDOzs6czRNCVFDDeg706+XDxcicW5adO7Mxrs5WvP1hBLHxGlycrLCwKPlFrVIpWPRmc9IzCnnt7bMkpWjx8lCTl1eyKMXBTsWKd1tx9FQG02efIj2zAD9vG7JzdcYyvt7WLH+nJT9vS+DTr6LIzdURUMvWeDReUoqWfiP2mbStXy9fhj1eyyT4FELc3RQKs8+oMzuzBoUajQaVyrQJy5YtQ6lU0q1bN7766isztUwIUVE21kreeLEh7y49T8jgm59UdP99LrRs6sygZw6SnVMcwCUkmR5H99hD3jjaWzJhxnGKiorXw914ZN1TT9QiKUXLgiURxrQb6xk3og77j6SxYk3JXohXr9uHUK8vvVl11/ZubP87CU3+zY/ZFEKIu4lZg8KGDRsSFhZGo0aNTNKXLl2KwWCgX79+ZmqZEKKipk2ox76wNMJOZNwyKOx8vxsRF7N56n+1eOQBL/Lzi9hzKJWP11+h4J8evM73u3E6PIsXJwTT+X53MrIK2bYriS+/jzYeZ9epnRuHjqXz5szGtGzqRHKqlh9+vcqWP4qHoBUK6NjGlS83xbBwTjPqB9kTn5jPuo3R/H2g9GbYAA3q2lO/rgMfrLxYeQ9HCFH91aC5f1XFrH2lAwcOZMOGDWXmffTRRwwdOpS7cMccIe46Pbp4UL+uPavKOJmkLL5eNjRr7ESdADtmzTvDko8v0b2jBy9OCC4p421D904eKJUKZsw5xRffRDFkgD8jBwWYlBnQ25eYqxqmvXGKn7bGM2VcML0e8AKKj9CztVUx/InaHDyaxtTXT7L7QArzQpvQsqlTmW3r09ObyOhcTodn/YsnIoSoaRRKZZW9agqztjQ0NJRff/213Pzly5ej18vwjRDVmae7mheeCebNheEUFN7ejziFEjAYmPv+Oc5dyObAkTSWfnqJ3j28sfrneDqlAjIyC3h32XkiLuXw19/JrP02mgG9fYz1KBVw/lI2q9dFcuFyDj9tjWfzH/EMeNT3n/sU//LfczCFb3+K42JkLus3xrDvcCoDevmWapeVlZKHunqVufG2EELc7ar1iSZCiOqvQbA9ri5WfLK4tTFNZaGgRRMnHu/jx4OP7+bG33apaQUkpxaQe92ikaiYPJRKBZ5uamLjNaSkF1CkM5hcGxWbh7ur2nhecWp6AVdi8kzqjorJo3tHDwAyswrR6fRciS5dplnj0j2FD3Ryx1qtZOv2xDt9HEKIGqombR1TVSQoFEL8K2EnMhgx6bBJ2qwpDYiK1fDlxuhSASHAqXNZPNDZAxtrpXExRy0/G4qKDCSlFi8UOXU2i4e7eaJQwLVZJLV8bUhJ1aLTGf6pJ5PafrYmddfysyUhqXghiU5n4NyFbGr5ly6TmGx6PjJAn4d92HMolYyswlJ5Qghxt6s5A91CiGpJoykiMjrP5JWfrycrq5DIf3roxo+sw6tTGxiv2bYrkcysQma90JDAWra0aOLEpNFB/PJngnGhyY+/XcXJQcULzwRTy9eGDm1cGfFkbTb9etVYzzc/xdGkgQMjnqyNn481D3fzpN8jPmz6paTMhk0x9OjsQd+e3vj5WPP4Y750bOfGD9fVA+DnY02LJk78/Ec8Qoh7kEJZda8aQnoKhRBVzs3VCi8Pa+N7Tb6eqa+fZOq4enyy6D4yswrZsSeZ1euvGMskpWiZ+vopJo+ty5qlbUhJ1fLdlji+/D7aWCb8Qjaz5p9h/Mg6jBoSQHyihg8/vsi2XUnGMrsPpPL+8gsMf7IWU8YFEx2n4dUFZzh51nQhyWMP+ZCcquXQsfSqexBCCFGNKQxmXt77ySef8Pfff9O9e3dGjx7NN998w+zZs9FqtYwYMYI5c+ZUuM7OfXdVQUuFEEIIUZX2bOlmtntnfTClyup2nLa4yuquTGbtKVy8eDGvvvoqjzzyCK+88gpXr15l0aJFTJ06Fb1ez8KFC/Hz82PcuHHmbKYQQgghxF3PrEHhqlWrWL16NcOGDePYsWO0a9eOlStX8vTTTwPg7+/PsmXLJCgUopobMzSAMcMCTdJS0wvoP3I/ULzw5NEe3ib5Z8KzGD/jmPH9jEn1aNPCBXdXK/Lyizh9LosVX1wmOlZT7n0H9PZhQG9ffLyKh6Yjo/NY83WUyfF0Y4YG0KOrJ57uanQ6PREXc1i9LpKz57P/1b2FEHeZGrSfYFUxa1AYFRVF586dAWjVqhUWFha0b19yMH2XLl2YNm2auZonhKiAy1G5THn1hPH9jauODxxJY/7icOP7Qp3pzJWIizn8sTOJxOR8HB0sGTM0gEVzm/Pk2INlrmAGSE4pYOUXkcTFFwdvvXt4seCVJoyZcsS4yCXmqoZFKy9wNSEftVrJoP7+fDC3OUPGHTKuMr6Tewsh7i4KhWxJY9ag0NbWltzcXON7Dw8P7O3tTcrodLobLxNCVENFRYZSZwhfr6BQf9P8zb+XrPpNSNLy8forfLG0Dd6e1lxNKL19DMDew6ZH1a1ed4UBvX1p3MDRGBRev+gEYOknl+jb04e6gXYcOZlxx/cWQoi7jdnPPj558qTx7OOYmBiT/PDwcAIDA83QMiFERfn72vDjmvYU6PScjchm9dpIriaWBFStmjqzZV0HcnJ1HDudyep1kWRklh0kWquVPPqQN1cTNCSlaG/r/kolPNDJA2trC86Uc0SdSqWgfy8fsnN0XLySU2n3FkLcBWT42LxB4TvvvIOdnV25+dHR0YwfP/4/bJEQ4k6cPZ/NW4vCiYnT4OpsScjgAFa814oRkw6Tla3jQFgaO/Ykk5CUj6+XDWOHB/LhvBY8PeWIyTDywEd9mTgqCFsbC67E5DLltZPGjarLExRgx8r3WmFlpUSjKWLWvDOlTjnp2NaV2TMaY61WkppewNTXT5KZZToKcSf3FkKIu4nZt6T5t7RaLVqt6a/5XkMOorSwMlOLhBDWaiXffHw/X30fwzc/xZbKd3OxYuOn9/PGe+fYvT/FmG5na4GLkxVurlYMHeiPh5uaiS8du+mZyiqVAi8PNfZ2Krp39KBPT2+eDz1hEhhaq5W4uVrh7GhJ354+3NfCmXEvHjPpqbyTewshKpc5t6TJWfZSldVtP+ndKqu7MtX4vtIFCxbg5ORk8oq9+KW5myXEPS1fq+fylVz8fW3KzE9NLyAhOZ9aN+Tn5hURG6/hxJlMXn37LLX9benawf2m99LpDMTF5xNxMYdVayO5FJnLk/38SrUnLj6fMxHZvL30PEVFBvo8bLoa+k7uLYQQd5NqHRSGhITw4IMP3rRMaGgomZmZJi//4Kf+oxYKIcpiqVIQUMuW1PSCMvMdHVR4uluTmlZ2/jUKBVhaVvBr6jauUaDA6lZl7uTeQoiaS465q97H3Pn5+aG8xcRPtVqNWq02SZOhYyH+W5PGBLH3UCqJyVpcnIrnFNrZWvDbXwnYWCsZMyyQnXtTSE3X4uNpzbiRdcjMKmTXgeKhY18vax7s4sHhY+lkZBXi7qrmqSdqodXq2R9Wsufg4reas3t/ivFs43Ej6nDgSBpJKfnY2qh4qKsHrZo68+LsU0DxsPHIQQHsPZRCSloBTo6WDHzUFw93NTv2Jlfo3kIIcber1kHh/Pnzzd0EIcRt8HBTM3t6I5wcLcnIKuRMRBbjpx8jMVmLlZWSoAA7ej3ghb2ditT0Ao6eyuCNd8+h0RQBoC3U06KJE4P6+eNgryIto4ATZzKZ8JLpvD8/bxucHS2N712dLXltWkPcXK3IzdVx6UouL84+Rdjx4vOL9XoDAf429O7RBCdHS7KyCjl3IZtJLx83bllzu/cWQtzllLJPYY1faFIWOftYCCGEqHnMudAkd9UrVVa33fh5VVZ3ZTL7QLdGo2HPnj2cPXu2VF5+fj5r1641Q6uEEEIIIe4tZg0Kz58/T6NGjejatSvNmjWje/fuxMeXnCyQmZnJ6NGjzdhCIYQQQtwTlIqqe9UQZp1TOHPmTJo1a0ZYWBgZGRlMmzaNTp06sXPnTmrXrm3OpgkhbtPwJ2rRraM7AX62aAv0nArPYsWay8TEaYxlZk1pwKM9TLeAOROexfgZx0zSmjRwZNyIQBo3cESnM3AxMocXZ5+ioKD4AOK3X21CvSB7nJ2syM4pJOxEBivWXC61irl3Dy8G9/enlp8tObk6du5NZtGqi+V+hqXzW9CqmbNJ2p+7k5j93rk7eSRCCFEjmTUo3LdvH3/++Sfu7u64u7uzefNmJk2aRJcuXdixY8dNTzsRQlQPrZo6s+mXq4RfyMZCqeCZkXVYNLc5w589TL5Wbyx34Ega8xeHG98X3nBaSJMGjiyc04z1G6NZvPoihYUGguvYYdCXlDt6KoN130WTklaAh5uaSWOCeOvlxkx86bixzOD+/gwZ6M/yzy9zJiILtZUSX6+y90u83uatV/nkyyvG99oCffmFhRB3HYUcc2feoFCj0aBSmTZh2bJlKJVKunXrxldffWWmlgkhbte17V+uWbA4gp+/7EiDYAdOnMk0phcU6knLKH817+Sxddm4JY71G0vOQI+N15iU+fanOOP/T0zWsn5jDAteaYKFhYKiIgMOdiqeGRHIzLmnOXIyw1j22krjm8nX3rx9QghxtzNrUNiwYUPCwsJo1KiRSfrSpUsxGAz069fPTC0TQtwpOzsLALKyTQOsVk2d2bKuAzm5Oo6dzmT1ukjjli/OTpY0aejIH7sSWfFuS/y8bYiKy+PjdZGcPJtV5n0c7FX07O7J6fAsioqKexPbtnJBoVDg4aZm/fI22NqoOB2eyUefXiYpRVtmPdc83N2Tng94kZ5RwIEjaXy2Icq4ZY4Q4h6gqDlz/6qKWYPCgQMHsmHDBkaMGFEq76OPPkKv17Ny5UoztEwIcaeef7ouJ85kmvTOHQhLY8eeZBKS8vH1smHs8EA+nNeCp6ccoVBnwM/bGoAxQwNZ9tklLkTm0utBLxa/1YKRk8JMegwnhtTh8T5+2FhbcDo8i5fmlvRU+npbo1TAiEG1WbL6Irl5Op4ZXodFbzYn5PkwdLqyd+D6Y2ci8Yn5pKYXEBRgx/iQOgQH2jP19ZNV9JSEEKL6MesAemhoKL/++mu5+cuXL0evl3k9QtQU0yYEUzfQntnvmW4xtX1PMvvD0oiMzmPv4VSmzz5FLV8bOrR1A0Dxzy/0n7bG8+tfiVy4nMPSTy4RHZvHYzecUfzVDzGMeeEIU147iV5v4NWpDY15CoUCS0sli1df5NCxdM5EZDP7vXP4+9hw3w0LSa635Y8Ewk5kEBmdx19/J/PagrO0beVC/br2lfRkhBDVnlJZda8aolqfaCKEqDmmjAumUzs3ngs9QXLqzc80Tk0vICE5n1q+Nsb3AFdick3KRcXm4eVheoxlZpaOzCwdMVc1RMXk8sOaDjRp4MiZiCxS04qHiK9El9STkVVIZlZhqXpuJuJSDoWFevx9bDh/Kee2rxNC1GAyfGz+zauFEDXf1PHBdOvozguvnCQ+Mf+W5R0dVHi6Wxu3kolPzCc5VUttP1uTcrV8bUhIKn8u4LUeRivL4v89da54/uH19TjYq3BytCQh+eZzCq9Xp7YtlpZKY7AqhBD3AukpFEL8Ky9ODOahrl6EzjtNnkaHq3Px2cQ5eUUUFOixsVYyZlggO/emkJquxcfTmnEj65CZVciuAynGer7aFMPTwwK5GJnDhcgcej/oTYC/La++XTwU3aieA43qO3DybCbZOTp8vW0Y+1QgsVc1nA4vDgZjrmrYfSCFF8YF8+5H58nN0zEhJIjouDyO/rMa2d3ViiXzWvDWB+Gcu5CNr7c1Pbt7sT8slcysQgJr2fHc00FEXMrm1LlMhBD3BtmSRoJCIcS/NPBRPwA+WtDSJH3e4nB++yuRIj0EBdjR6wEv7O1UpKYXcPRUBm+8e85kde93m+NQWyl5fmxdHB0suRiZw9TXT3I1objnUVugp1sHd54eFoi1tQWp6VoOHknnjXfPmux5+NYH4UweW5f33miKXg/HT2fw4hunjCuUVSoFAf62WKuL/wOg0xlo3cKZJ/v6YWNjQVKylv1hqXy2IQqZ0iyEuJcoDAZD2cvxarDOfXeZuwlCCCGEqKA9W7qZ7d6a9fOrrG6b4bOqrO7KZPazj6+PSffs2cOAAQNo0qQJDz30ED/99JMZWyeEEEIIce8wa1DYqFEjkpOTAdi5cyfdunVDr9fz1FNP4ezszOOPP87vv/9uziYKIYQQ4l6gVFTdq4Yw65zC63sJ33rrLSZMmMCyZcuMaaGhocyfP59HHnnEHM0TQtyG4U/UoltHdwL8bNEW6DkVnsWKNZeJiSvecNrCQsG44YG0b+OKr7cNubk6wk6ks+KLSOPqY29PNRs/bV9m/a+9fYYde1PKzBvQ24cBvX3x8Sre/DoyOo81X0dx4EiascyYoQH06OqJp7sanU5PxMUcVq+L5Oz5bGOZGZPq0aaFC+6uVuTlF3H6XBYrvrhMdKym1D2FEOJuZdY5hUqlkoSEBDw9PfH19eWHH37g/vvvN+afPXuWrl27kpJS9n8QyiNzCoX47yyc3Yw//04i/EI2FkoFz4ysQ90AO4Y/e5h8rR47WwveerkJW/6I50JkDo72KiaPDcbCQsHYaUeB4r1dnR0tTert18uXYY/Xov/IfWjyy17x0amtG0V6A3H/nHjSu4cXQwfWYsyUI8YTVR7u5kl6RgFXE/JRq5UM6u/PA508GDLuEBlZxcfs9XvEh6jYPBKT83F0sGTM0ADqBdnz5NiDsthEiP+QOecU5m94p8rqth46s8rqrkxmX32cnZ2NtbU1NjY2qNWmm8taWVmh0cgvdSGqsxdnnzJ5v2BxBD9/2ZEGwQ6cOJNJbl5RqePiFq2+yCcf3IeXh5rEZC16PaRlmJ6V3LW9G9v/Tio3IATYezjV5P3qdVcY0NuXxg0cjUHhtl1JJmWWfnKJvj19qBtox5F/tqnZ/Hu8MT8hScvH66/wxdI2eHtaG1c/CyHucjVomLeqmH1Tnvr16+Pi4kJkZCRHjhwxyTtz5gx+fn5mapkQ4k7Y2VkAkJVdWG4Ze1sL9HoD2Tm6MvMb1LWnfl0Hft6WcNv3VSqhRxcPrK0tOPPPvoU3UqkU9O/lQ3aOjotXyj6pxFqt5NGHvLmaoCEp5fY3vBZCiJrOrD2FO3bsMHnv4+Nj8v7KlSs888wzN61Dq9Wi1Zp+ceuLClBaWFVOI4UQFfL803U5cSbT2FN3IytLBRNCgti2K4m86/YpvF6fnt5ERucaN6W+maAAO1a+1worKyUaTRGz5p3hSozpvTu2dWX2jMZYq4tPKZn6+kkys0wD0oGP+jJxVBC2NhZcicllymsn0enuuh27hBDlUZi9n8zsavw+hbNnz2bOnDkmabXqhVC7wWgztUiIe9e0CcF0aOPGszOPlXn+sYWFgjdfboyXh5rnQ0+UGRRaWSn56YsOfPFNFF//GHvLe6pUCrw81Njbqeje0YM+Pb15PvSESWBorVbi5mqFs6MlfXv6cF8LZ8a9eIyMzJLeTDtbC1ycrHBztWLoQH883NRMfOkYBYU1+itSiBrFrHMKv32/yuq2HjS9yuquTDU+LA4NDSUzM9Pk5R/8lLmbJcQ9Z8q4YDq1c2PyKyfKDwhnNsbXy5qpr50st5fwgU7uWKuVbN2eeFv31ekMxMXnE3Exh1VrI7kUmcuT/UynneRr9cTF53MmIpu3l56nqMhAn4e9Tcrk5hURG6/hxJlMXn37LLX9benawf02P70QosZTKKruVUOYfaHJzYSEhBATE8P27dvLLaNWq0stUJGhYyH+W1PHB9O1gzvPh54gPrH0woxrAaG/rw2TZ50gK7vsuYQAfR72Yc+hVOPK4ApTgKXlzX/vKlBgdasyt1GPEELcTap1UOjn54dSDqgWolp7cWIwD3X1InTeafI0Olydi7eWyckroqBAj4US3nq5MfXr2jNz7mmUSoxlsnJ0JvP2/HysadHEiRlzTpV5r8VvNWf3/hQ2/XIVgHEj6nDgSBpJKfnY2qh4qKsHrZo6G1dEW6uVjBwUwN5DKaSkFeDkaMnAR33xcFezY2/xxvm+XtY82MWDw8fSycgqxN1VzVNP1EKr1bM/LK3Mdggh7kISb1TvoHD+/Ko7h1AIUTkGPlo8VPvRgpYm6fMWh/PbX4l4uKvp0r54GHbN0jYmZZ4PPc6x05nG94895ENyqpZDx9LLvJeft43Jfoauzpa8Nq0hbq5W5ObquHQllxdnnyLsePH1er2BAH8bevdogpOjJVlZhZy7kM2kl48bF8JoC/W0aOLEoH7+ONirSMso4MSZTCa8ZDrnUAgh7nY1fqFJWWTzaiGEEKLmMetCk01Lqqxu68dfqLK6K5PZ+0o1Gg179uzh7NmzpfLy8/NZu3atGVolhBBCiHtKNTn7eMGCBbRt2xYHBwc8PT0ZMGAAERERt7xu165dtG7dGmtra4KCgli5cmXFH0GFr6hE58+fp1GjRnTt2pVmzZrRvXt34uNLThbIzMxk9GjZWkYIIYQQ94Zdu3YxadIkDhw4wLZt29DpdPTs2ZPc3Nxyr4mMjOTRRx+lS5cuHDt2jFmzZjF58mS+//77Ct3brHMKZ86cSbNmzQgLCyMjI4Np06bRqVMndu7cSe3atc3ZNCHEv9CiiRPDHq9Fg7r2uLupCZ13mr8PlBxJ17WDO/17+dAg2AFnR0tGTQ7jYmTJF56DvYqnhwXSrpULnh5qMrMK2X0ghU/WXyE3z3Qrmw5tXBk9JIC6gXZotHpOnM7glQWlRx6umTWlAY/2MN2O5kx4FuNnHKukTy+EqJGqyebVW7duNXn/+eef4+npyZEjR+jatWuZ16xcuZLatWuzePFiABo1akRYWBjvv/8+//vf/2773mYNCvft28eff/6Ju7s77u7ubN68mUmTJtGlSxd27NiBnZ2dOZsnhLhDNtYWXIzM4Zc/E5g/q0kZ+UpOnctix95kXn6+Qal8d1cr3N2sWPbZZSJjcvH2tGbGs/Vwd1Xz2tslAV+3ju7MfK4+q9ZGcvRkBiigbsCtvzcOHElj/uJw4/tCOblECFGFyjp9rawt9cqSmVm8GM/V1bXcMvv376dnz54maY888giffvophYWFWFpalnOlKbMGhRqNBpXKtAnLli1DqVTSrVs3vvrqKzO1TAjxbxw4ksaBI+Vv5/L7jiQAvD3L/kKMjM7j1et6+64m5LN6XSSvvdgICyUU6cFCCS88E8yyzy/zy3VnJMfEaW7ZvoJCPWkZsrJYCHGdKtxkesGCBaVOX3vjjTeYPXv2Ta8zGAxMmzaNzp0707Rp03LLJSQk4OXlZZLm5eWFTqcjJSWl1DHC5TFrUNiwYUPCwsJo1KiRSfrSpUsxGAz069fPTC0TQlQ3dnYqcvN0FOmL39ev64CnuxqD3sBni+/D1cWKi5G5LPvsUrnnLl/TqqkzW9Z1ICdXx7HTmaxeFynbzwghqkxoaCjTpk0zSbudXsLnnnuOkydPsmfPnluWVdwQ1F7bXObG9Jsx6wD6wIED2bBhQ5l5H330EUOHDuUu3DFHCFFBjg4qRg0OYPPWkoVovt7WAIwZFsgX30Yzc+5psnMKWbqgJQ725f/ePRCWxtyF55j8ygk++vQyjeo58OG8Fliqas5RVEKIKqBUVtlLrVbj6Oho8rpVUPj888+zefNmduzYgb+//03Lent7k5CQYJKWlJSESqXCzc3t9h/BbZesAqGhofz666/l5i9fvhy9Xv8ftkgIUd3Y2ljw3uvNuBKTx2cboozpyn+2eVj7bTS79qUQcSmH+YsjMBgMPNjZo9z6tu9JZn9YGpHReew9nMr02aeo5WtDh7a3/8UphBBVxWAw8Nxzz7Fp0ya2b99OnTp1bnlNhw4d2LZtm0naH3/8QZs2bW57PiFUg30KhRCiPDY2Fiyc0wxNfhGz5p2mqKhk5CAlrQCAKzElq5YLdQbiE/Lx8rj1sMw1qekFJCTnU8vXpvIaLoSoeRSKqntVwKRJk1i/fj1fffUVDg4OJCQkkJCQgEZTMl86NDSUkSNHGt9PmDCBqKgopk2bxrlz5/jss8/49NNPmT59eoXuLUGhEKJasrWxYNHc5uh0Bma+dZqCQtOpJBEXs9EW6KnlZ2tMs7BQ4O1pTUKS9sbqyuXooMLT3ZrUf4JMIYQwpxUrVpCZmUn37t3x8fExvr755htjmfj4eKKjo43v69Spw6+//srOnTtp2bIlb775Jh9++GGFtqOBan72sRCiZrKxVuLnU9Lz5uNlTXAdO7JzdCQma3GwV+HlocbdtbhHr/Y/gV1aegFpGYXY/BMQqtVK5i48h52NBXY2FgBkZBWi10OepoiffrvK08MCSUrRkpCUz7DHawGwY0+y8d5frmjLqi8us/tAKjbWSsYMC2Tn3hRS07X4eFozbmQdMrMK2XUg5b96PEKI6qia7FN4O2sp1qxZUyqtW7duHD169F/dW4JCIUSlaxjswNIFLY3vJ48NBuDXvxKYvziCzve78cqUhsb8uTMbA/DZV1f4bEMUDeva06ShIwDffny/Sd1PPH3A2BO47PPLFOkNvDa1IWq1krMR2bzw6gmyc3XG8gH+ttjZFX/VFekhKMCOXg94YW+nIjW9gKOnMnjj3XNoNKabYgsh7jHK6hEUmpPCcBcu7+3cd5e5myCEEEKICtqzpZvZ7p2/9ZMqq9u619gqq7symTUsbtasGW+++SYxMTHmbIYQQggh7nXVZKGJOZk1KDxz5gxLliyhTp069OrVi++//x6dTnfrC4UQQgghRKUy+5zCkydPcujQIT777DOGDBmCi4sLI0eO5Omnny510okQovob/kQtJoQE8e1PsXz4ySUAxgwNoEdXTzzd1eh0eiIu5rB6XSRnz2eXWcf7s5vRvrUrofNO8/eBVGN6/br2TAwJomE9B/R6A7v2JbP000to8kv2M23d3JmxwwOpG2BHXn4Rv29PZPW6SONJKGXp94gPD3fzpH5de+xsVfQasoecXJljKMQ9pZosNDEnsz8BlUrFgAED2Lx5MzExMUydOpXNmzfTtGlTOnbsyGeffWbuJgohblPDeg706+XDxcgck/SYqxoWrbxAyHNhPDvzOPFJ+XwwtznOjqU3VR3U36/M1XdurlYsfrM5sfEaxk0/youzTxFY245Z1y1YqRtox3uzm3HwaDqjpxxh9nvn6HS/GxNGBd203Wq1koNH01j3XfRNywkhxN3MrEHhjefxeXt7Exoayvnz5/nrr7+oW7cukydPNlPrhBAVYWOt5I0XG/Lu0vNk55hOA9m2K4mwExlcTcwnMjqPpZ9cwt5ORd1AO5NywYF2DO7vz4IlEaXq79TWDZ3OwAcrLxATpyH8QjYfrLzAA5088PMpPvKuRxdPLl3JYc3XUcTF53P8dCar1kby+KO+2PyzpU1Zvtscx/qNMZwJz6qEJyGEqJFkTqF5g8KbLXzu3r0769at4+rVq/9hi4QQd2rahHrsC0sj7ETGTcupVAr69/IhO0fHxSslPYpqtZI3ZjRi0aqLpGUUlrrO0lJBoU7P9V8b2oLiMeHmjZ0AsLJUUFBg+r2i1epRqy1oWNf+Dj+ZEELcG8waFIaEhGBjc/OjpRwdHW+ar9VqycrKMnnpi+RkAiH+Sz26eFC/rj2rvrhcbpmObV3549vObP++C4P6+zP19ZNkZpX0KE4eW5fT4VnsOZha5vVHT2bg5mLF0IH+qFQKHOxUjB9ZfCaom4sVAAePpdO0oSMPdfVAqQR3VytCBgcUl3G1qqyPK4S4GymVVfeqIcza0s8//xwHB4d/VceCBQtwcnIyecVe/LKSWiiEuBVPdzUvPBPMmwvDSx1Fd72jJzMY/UIYE186xsEjacyd2Qhnp+I5hZ3auXFfc2c+/PhiuddHRucxb3EEQwbW4s+NXfhpXQeuJuSTml6A/p9FJIePpbP888tMf7Y+2zd1ZcOqduwPKw4y9TdZaCKEEAaFospeNUWN37xaq9Wi1Zqec9pryEGUFtIrIMR/oUt7Nxa80hRdUclXicpCgV5vQG+ABx/fXWZAtmFVW37ZlsD6jTFMHluXJ/r6ob/u20hloaCoyMDJs5k8P+uEybUuzpbk5xdhMMDv33Rm9ntn2bHX9Jg6N1crsnN0+Hha8+WKtoyddpTwC2Wvdr6mVVMnli5oKauPhTATc25erdm+rsrqtnlwRJXVXZnMviXNzYSEhBATE8P27dvLLaNWq1Gr1SZpEhAK8d8JO5HBiEmHTdJmTWlAVKyGLzdGl9tDp0CBlWXxYMX6jdFs+SPeJH/dsrYs/fQSew+VHk5O/2fO4WMPeVNQqOfw8fRSZVLTiqeRPNTNk8TkfM5funlAKIS4x8mWNNU7KPTz80NZg8bihbgXaTRFREbnmaTl5+vJyiokMjoPa7WSkYMC2HsohZS0ApwcLRn4qC8e7mp27E0GIC2jsMzFJYnJ+cQn5hvfP/6YL6fDs9Boimjb0oVnxwSx8otIk169oQP9OXg0HYPBQNcO7gz/Xy1ef/esMTh1d7ViybwWvPVBOOf+6Tl0dbbE1cUKP9/iOc5BAfbkaXQkJmtLraQWQoi7VbUOCufPn2/uJggh/iW93kCAvw29ezTBydGSrKxCzl3IZtLLx0sFk7fSuL4DTw8LxMbGgujYPN5bdp7fdySZlGnf2pWRgwKwslRwMTKX0HlnOHAkzZivUikI8LfFWl3yg3NAb1/GDAs0vl/+TksA5i0O57e/Eiv+oYUQNY/0FNb8OYVl6dx3l7mbIIQQQogKMuucwp0bqqxum+5Dq6zuymT2sFij0bBnzx7Onj1bKi8/P5+1a9eaoVVCCCGEuJfI6mMzB4Xnz5+nUaNGdO3alWbNmtG9e3fi40smm2dmZjJ69GgztlAIIYQQ4t5g1jmFM2fOpFmzZoSFhZGRkcG0adPo1KkTO3fupHbt2uZsmhB3teFP1KJbR3cC/GzRFug5FZ7FijWXiYnT3Nb1zRo5snRBSyKjchn9whFjuoWFghFP1qb3g164u6mJictjxZrLHDxasjrYQgljhgXycHdP3JytSE0v4Ne/EvnimyiT00rGDA2g3yM+ONirOHu++Ei7a3MQHexVPD0skHatXPD0UJOZVcjuAyl8sv4KuXlVu5XMzdoF4OttzXNj6tKssSNWlsVnKi9addG4YloIUU3JnELz9hTu27eP+fPn4+7uTnBwMJs3b6Z379506dKFy5fLPxlBCPHvtGrqzKZfrjJ+xjGmvnYSCwsFi+Y2N1l8UR47WwtendqQIydKbwMzbngg/Xv5sGjVRUY8e5gff7vK/FlNqBdUcsTcU0/Upn9vXxatvMhTzx5m+eeXGTbQnyf6+JWU+V8tBg/w54NVFxk77Sip6QUsmtvceH6xu6sV7m5WLPvsMiOfC2Pe4gja3+fKy5Mb/KvnMmtKA8YMDSg3/1btslYrWTS3OQaDgRdeOcnEl46jUil557WmNen4UyHuTXL2sXmDQo1Gg0pl2lm5bNky+vXrR7du3Th//ryZWibE3e3F2af47a9EIqPzuHgllwWLI/D2tKZB8K1PGJoxqT7bdiVxJjyrVN4jD3ix7ttoDhxJ42piPj/+Fs/BY+kMGeBvLNOkoSN7DqSwPyyNhCQtO/elcOh4Og3qldz7yX5+rP02mt37U4pPMlkUjlptQc9unkDx6SavLjjL3sOpXE3I5+jJDFavi6RTOzcsrvtWc3e1Ys5LjfhtQ0d++bIjC15pgren6b6mFXGrdjVr7IS3pzXzFkdwOSqXy1HFz7ZxfUdaN3e+4/sKIcR/waxBYcOGDQkLCyuVvnTpUvr370+/fv3M0Coh7j12dsU9XVnZNx/ifLSHF34+1ny+4UqZ+ZaWSrSFprtVF2j1NG/sZHx/6mwmrVu4UOufPQGDA+1o3siJA/8cR+frZY27q5pDx0p6Igt1Bo6fzqBpw/LPQrezU5Gbp6Pon9ur1UqWzm+BRlPEpJdP8OzM42jyi1g4pzkqVcV/ud9Ou6xUSgxA4XXPQFuop6jIYPIMhBDVkJx9bN6gcODAgWzYUPYS8I8++oihQ4dyF+6YI0S18/zTdTlxJvOm+wb6+9gwISSIue+HGwOvGx06lsaQAf74+9igUECbli50bu+Gm2vJKUPrN8bw5+4kvlzRlp0/dOGzJa35dnMsf+4u3sja1aW4bFpGgUnd6RkFxrwbOTqoGDU4gM1bSxaqPdTFE70B3l56nstRuUTF5jF/SQReHmpaNXO+ncdi4nbadSYii/z8IiaOCkKtVmKtVjJpdBAWFgqTZyCEENWRWReahIaGEhoaWm7+8uXLWb58+X/YIiHuPdMmBFM30J5nZx4rt4xSCW/MaMinX10h5mr5i1GWrL7ES8/X58sVbTEAV+M1/PpnAo8+5G0s06OLBz27ezLn/XNERudRL8iOyWODSUkrYOv26zaKvvH3oEJROg2wtbHgvdebcSUmj882RBnTGwTb4+djwx/fdjYpb2WpxM/bmsPAw908mTGp/nV5CgwGGDKwljHtvWXn2bbrug2yb9KujKxCXnvnLNMn1jOe5fzn7iQiLmaj18sPXCGqs5q0dUxVqdYnmgghqtaUccF0aufGc6EnSE4tKLecrY0Fjeo5Ui/IgakT6gGgVIBSqWDnj12Z9vpJjp7MICOrkFnzzmBlqcDRwZKUtAImhtQxOaru2dFBfLkxhr/+Lu4ZvByVi7eHNSOerM3W7YmkpRe3w9WleGXyNS5OlqV66WxsLFg4pxma/CJmzTtNUVFJ4KVQKDh/MZs5C8+V+jwZmcXD5HsOpXL2fMkUlomjgkhO1bJxS5wx7drxe7fbrsPH0hk87hBOjiqKigzk5Bbx09oOXE0oeQZCCFEdSVAoxD1q6vhgunZw5/nQEyZBW1ly84oYMemwSdrjj/lyX3MXXl1wptT1BYUGUtIKsLBQ0K2jB9v3JBvzrNUW6G+YFlKkN6D850f61cR8UtK0tG3pwoXLOUDx0XQtmzqz8ouSXQlsbSz4YG5zCgv1zHzrNAWFpnWev5RNjy4epGcUkqcpe5sajaaIuOvy8jRFZGfriIsv/Txut13XZGYVn5l8X3NnXJws2XMotcw2CCGqCdmSRoJCIe5FL04M5qGuXoTOO02eRoersyUAOXlFFBQUTxgcP7IOHm5WvLUoAoOBUvMN0zMKKSjQm6Q3ru+Au5uai5dzcHdTM2ZYAEolfLUp2lhm7+FURg4KIDFZS2R0LvWD7Bk8wJ9ftyUYy3y3OY4RT9Ym9moeMVc1jBxUG622iD/+Gca1sbFg0dzmqNVK5i48h52NBXb/bAuTkVWIXg9/7Epi2OO1ePvVpnzy5RWSU7V4eajp1sGdrzbF3LRntDy3ahcUL8aJis0jPbOQpg0deeGZYL79Kfa294AUQghzqTZBYVFRESkpKVhYWODu7m7u5ghxVxv4aPGegB8taGmSPm9xOL/9VTyvz83VCi8P6wrVa2Wl5Jnhgfh626DJL+JAWCpvfhBOTm5Jb9yiVRd55qlAXpxYDxen4iHmzVvj+fzrkvmAX34fg9pKybSJ9XCwt+Ts+Symvn4SzT+9eg3r2tPknxW/3358v0kbnnj6AAlJWrRaPZNePs7EUUHMm9UYWxsVKalajpxIv+MNrm/VLoDa/raMDwnC0V5FQlI+a7+N5pufYu/ofkKI/45BegpRGMy8vPeXX37hnXfe4dChQxQWFs/dcXBwoG/fvsybN++OTjbp3HdXZTdTCCGEEFVsz5ZuZrt3zsEtVVa3/f19q6zuymTWsHjdunUMHTqU1q1bM3XqVDw8PHjppZd4++23iYmJoXXr1ly4cMGcTRRCCCGEuCeYtaewUaNGzJ49m8GDBwMQFhbGwIEDiY6ORqFQMGTIEAoKCti0aVOF6pWeQiFqluFP1GJCSBDf/hTLh59cAqBrB3f69/KhQbADzo6WjJocxsXI3FvW9WQ/Pwb29sXLQ01GViE796Ww6ovLpRaiCCGqH3P2FGYf+qXK6nZo91iV1V2ZzNpTGBUVxf33l8wHatOmDQkJCcTHF29AO23aNHbs2GGu5gkh/gMN6znQr5cPFyNzTNJtrJWcOpdV5sre8jzczZMJIUF8/nUUTz17mLeXnqdHZw/GhwRVdrOFEOKuY9aFJoGBgYSFhREYGAjA0aNHUSqVeHl5AeDq6mqcZyiEuPvYWCt548WGvLv0PCGDA0zyft9RvKK3ImcVN23oyKlzmcbNphOStPy5O4lG9cs/Hk8IIYDijejvcWYNCidNmsTYsWM5fPgw1tbWfPLJJ4wYMQILi+KtJQ4ePEj9+vVvUYsQoqaaNqEe+8LSCDuRUSoovBMnz2bSs7sXjeo5cO5CNr5e1rRv42p6UooQQogymT0oVCqVrF+/Hq1Wy6hRo3jttdeM+e3ateOrr74yYwuFEFWlRxcP6te155lpRyutzr/+TsbZyZLl77REoQCVSskPv8axfmNMpd1DCHGXki1pzL9P4cSJE5k4cWKZefXq1bvl9VqtFq1Wa5KmLypAaSGHzwtRXXm6q3nhmWCmvX6yUheAtGrqxMhBASxceYGzEdn4+1jzwrjic5W/+Cb61hUIIcQ9zOxB4b+1YMEC5syZY5JWq14ItRuMNlOLhBC30iDYHlcXKz5Z3NqYprJQ0KKJE4/38ePBx3ej11e83rHD6/D7jkR+/qP4dJTLUblYW1vw0nP1WfttNObdlVUIUZ0ZZE5h9Q4KQ0JCiImJYfv27eWWCQ0NZdq0aSZpvYYcrOqmCSH+hbATGaXOUp41pQFRsRq+3Bh9RwEhgLVaiUFvGvnp9QYUFM8hl6BQCFEuGT6u3kGhn58fSuXN/0hqtRq12nR1ogwdC1G9aTRFpc5Szs/Xk5VVaEx3sFfh5aHG3bX43+/afrYApKUXkJZRvCvBq1MbkJxawKq1kQDsPZTK4AH+nL+cw9nz2fj52DD2qTrsOZR6x4GmEELcK6p1UDh//nxzN0EIYSad73fjlSkNje/nzmwMwGdfXeGzDcXnJHt5WHN9x+AX30RhMMAzw+vg4WZFRlYhew+lsnpd5H/adiFEzVM8pnBvM/vZx1VBTjQRQgghah5znmiSefTPKqvb6b6HqqzuymT2AXSNRsOePXs4e/Zsqbz8/HzWrl1rhlYJIYQQ4l5iUCir7FVTmLWl58+fp1GjRnTt2pVmzZrRvXt34xF3AJmZmYweLauIhRBCCCGqmlnnFM6cOZNmzZoRFhZGRkYG06ZNo1OnTuzcuZPatWubs2lC3PVaNHFi2OO1aFDXHnc3NaHzTvP3gdRyyzdv7MiEkCAC/G2xVitJSNby09arfPtTnLFM1w7ujHyyNn4+NqhUCmKvavj6xxjjkXXXuLtaMXFUEO1bu6JWK4mJ0/D2hxFEXCo5/3jM0AD6PeKDg72Ks+ez+WDlBZPFKTMm1aNNCxfcXa3Iyy/i9LksVnxxmehYTSU+JVNdO7jTv5cPDYIdcHa0ZNTkMC5G5pqU6feIDw9386R+XXvsbFX0GrKHnNyiKmuTEKKS1KAevapi1qBw3759/Pnnn7i7u+Pu7s7mzZuZNGkSXbp0YceOHdjZ2ZmzeULc1WysLbgYmcMvfyYwf1aTW5bX5OvZ9Escl67koskvonljJ2ZMqk9+vp7Nvxf38GdnF7L22yiiYjUU6vR0autG6AsNSc8o5NCxdAAc7FSseLcVR09lMH32KdIzC/DztiE7V2e811P/q8XgAf7MWxxBTFweIYMDWDS3OUMnHkajKQ6wIi7m8MfOJBKT83F0sGTM0OIyT449eMcrjWdNaUBCYr5xIUvpZ6bk1LksduxN5uXnG5RZRq1WcvBoGgePpjEhJOjOGiKEEGZg1qBQo9GgUpk2YdmyZSiVSrp16yZH3AlRhQ4cSePAkbTbLn/hcg4XLpf05CUkJdGtgzvNmzgZg8JjpzNNrvluSxy9enjRvLGTMSh86olaJKVoWbAk4rq6TE8lerKfH2u/jWb3/hQA5i0KZ/O6jvTs5slPW4vvde2e167/eP0VvljaBm9Pa64m5APFPZLPj61Lu1Yu6PXFZyMv+fhiqfvdrms9nt6e6nLLfLe5uOe0VVOnO7qHEMI8ZPNqM88pbNiwIWFhYaXSly5dSv/+/enXr58ZWiWEuB31guxp2siJ46czyi3Turkztf1sOX6mJFjs1M6N8IvZvDmzMVvWdeCzxffRt6e3Md/Xyxp3V7UxiAQo1Bk4fjqDpg0dy7yPtVrJow95czVBQ1JKccCnVitZOr8FGk0Rk14+wbMzj6PJL2LhnOaoVPLlL4QwJQtNzNxTOHDgQDZs2MCIESNK5X300Ufo9XpWrlxphpYJIcqz6fP2ODtZYqFU8NmGK8Yj5a6xs7XghzUdsLJUUKSHD1ZcIOx4SYDn623DgN42fPNjLGu/i6ZxfQemjAumsNDA1h2JuLoUbz6fllFgUm96RgFentYmaQMf9WXiqCBsbSy4EpPLlNdOotMV77L1UBdP9AZ4e+l5Y/n5SyLY+nUnWjVz5vB1QacQQggzB4WhoaGEhoaWm798+XKWL1/+H7ZICHErk14+jo21BU0aODAhJIi4eA1/7k425udpihj9Qhg21ha0aeHCc0/X5WqCxji0rFRA+MVs44bSFy7nEFjblgGP+rJ1R2LJjW7cQVWhKJX2x85EDh9Lx83ViqED/XlzZmMmvnSMgkIDDYLt8fOx4Y9vO5tcY2WpxM/bmsPAw908mTGp/nV5CgwGGDKwljHtvWXn2bbLdKGMEOIuJMPH1ftEEyFE9ROfWDxf73JULq7OVowZGmgSFBoMEBdfXOZiZC4BtWwZ/mRtjp0+BUBqegFXYkyPuIuKyaN7Rw+g+Bg7AFcXK1LTS3oLXZwsS/Ue5uYVkZunITZew5mILH7b0ImuHdz5c3cyCoWC8xezmbPwXKnPkJFZfEzenkOpnD1fMoVl4qggklO1bNxSsqL62pF6Qghxt5OgUAhx5xRgaXnz+TIKinvnrjl1LtN4jvE1tfxsSUgqDiSvJuaTkqalbUsX48IWlUpBy6bOrPzi8s3vdV17zl/KpkcXD9IzCsnTlL0ljEZTRNx1eXmaIrKzdcagVghx76hJc/+qigSFQtyjbKyV+PnYGN/7eFkTXMeO7Bwdiclaxo8sPj/4rUXFq4Qff9SXxGQtUbHFvXzNGzsydGAtvv+5pFdt+BO1CL+Yw9V4DSpLBR1au9HrQS/eX3HBWOabn+JY+W5LRjxZm+17kmhc35F+j/jw7kclc/++2xzHiCdrE3s1j5irGkYOqo1WW8Qf/wzj+npZ82AXDw4fSycjqxB3VzVPPVELrVbP/rDiFdV/7Epi2OO1ePvVpnzy5RWSU7V4eajp1sGdrzbFkJxq2ut4OxzsVXh5qHF3LV59fC24TUsvMPYoujpb4upihZ9v8bMNCrAnT1P8TLNzdGVXLIQQ1YAEhULcoxoGO7B0QUvj+8ljgwH49a8E5i+OwM3VCi+PkoUdCiWMD6mDj5c1RUUG4hI0rPzisnGLGCje+/DFicF4uqnRFuiJis1j7sJwtu8pGV4Ov5DNrPlnGD+yDqOGBBCfqOHDjy+azNv78vsY1FZKpk2sh4O9JWfPZzH19ZPGPQq1hXpaNHFiUD9/HOxVpGUUcOJMJhNeOmYcGtZq9Ux6+TgTRwUxb1ZjbG1UpKRqOXIindy8O9tMuvP9brwypaHx/dyZjQH47Ksrxr0NB/T2ZcywQGOZ5e8UP+N5i8P57a/r5kwKIaoVAzKnUGEwGG6czl3jde67y9xNEEIIIUQF7dnSzWz3Tjm9v8rqdm/aocrqrkzSUyiEEEKIe57MKTTz5tW3cu7cOYKC5JgoIYQQQlQxhaLqXjVEte4pLCgoICqq7DNIhRDVR4smTgx7vBYN6trj7qYmdN5p/j6QWmbZGZPq0b+XL0s+vmg8Eu5G789uRvvWrjetB2DM0ACT+XtQvOVN/5Elw0DlDUct++wSG36IBaDfIz483M2T+nXtsbNV0WvIHnJy72zeoRBC1FRmDQqnTZt20/zk5OSb5gshqgcbawsuRubwy58JzJ/VpNxyXdq70bi+I8mp5Z89PKi/HxWZ6nw5Kpcpr54wvtfrTfP7jdhn8r59a1dentyAXftSjGlqtZKDR9M4eDSNCSEyOiHEvchQvQdP/xMVCgr1ej1r1qxh06ZNXLlyBYVCQZ06dXjiiScYMWIEigp2kS5ZsoSWLVvi6Fj2eaY5OTkVqk8IYR4HjqRx4EjaTcu4u1oxdXw9XnzjJO++3qzMMsGBdgzu788z046yeV3H27p3UZHhphtM35jXub07R09lcDWxZC/Caz2WrZo63dY9hRDibnTbQaHBYKBfv378+uuvtGjRgmbNmmEwGDh37hyjRo1i06ZN/PjjjxW6eb169Zg6dSrDhw8vM//48eO0bt26QnUKIaofhQJem9aQDZtiiIzOK7OMWq3kjRmNWLTqYoVOEfH3teHHNe0p0Ok5G5HN6rWRJgHf9VycLenYxpV5iyPu6HMIIe5ehho096+q3HZQuGbNGnbv3s1ff/3FAw88YJK3fft2BgwYwNq1axk5cuRt37x169YcOXKk3KBQoVDcchhJq9Wi1ZoORemLClBaWN12O4QQVeup/9WiSG/guy1lzyEEmDy2LqfDs9hzsPw5hDc6ez6btxaFExOnwdXZkpDBAax4rxUjJh0mK7v0RtG9H/QmT1PErn0yNUUIIW502wPoGzZsYNasWaUCQoAHH3yQl19+mS+//LJCN1+4cCFTpkwpN79Fixbob5wgdIMFCxbg5ORk8oq9WLF2CCGqToO69jzZz/+mvXOd2rlxX3NnPvz4YoXqPnAkjV37UrgclUvYiQxmzCk+X7n3g95lln/sYW/+2JlEQeFdtz2rEOJfMiiUVfaqKW67p/DkyZO8++675eb37t2bDz/8sEI39/Yu+4u7IkJDQ0stWOk15OC/rlcIUTmaN3HCxcmS7z9rb0xTWSh4bkxdBvXz58mxB2nd3Bk/bxt++7qzybVvvdyEk2czeX7WiRurLVO+Vs/lK7n4+9qUymve2IkAf1veeOfsv/tAQghxl7rtoDAtLQ0vL69y8728vEhPT6+URlWEWq1GrVabpMnQsRDVx+87Egk7bvrd8MHc5vy+I5Ff/kwAYP3GaLb8EW9SZt2ytiz99BJ7D93+cLKlSkFALVtOnM0sldenpzfhF7K5eCX3Dj6FEOJuJ8fcVSAoLCoqQqUqv7iFhQU6XeUe9h4SEkJMTAzbt2+v1HqFEJXLxlqJn09J75yPlzXBdezIztGRmKwtNb9PpzOQml5ATJwGKF4hXNbiksTkfOKvWzSy+K3m7N6fwqZfrgIwaUwQew+lkpisxcWpeE6hna0Fv/2VYFKPrY0FD3Ty4KNPL5XZfldnS1xdrPD7p4cxKMCePE1x27NzKvd7TQhRPdWkYd6qUqHVx6NGjSrVK3fNjYs9KoOvry9KpfyRhKjuGgY7sHRBS+P7yWODAfj1rwTmV+JKXz9vG5wdLY3vPdzUzJ7eCCdHSzKyCjkTkcX46cdITDb9PnqoqycKBfy5O6nMegf09jXZBHv5O8WfZd7icH77K7HS2i+EENWZwnCbu8SOHj36tir8/PPP/1WDKkPnvrvM3QQhhBBCVFB5JxD9F+LOn6qyuv3ql703a3Vz2z2FVRXsnTt3jgMHDtChQwcaNmxIeHg4S5YsQavVMnz4cB588MEqua8QQgghhChh1mPutm7dSv/+/bG3tycvL48ffviBkSNH0qJFCwwGA4888gi///67BIZCCCGEqFKy0KQCQeHjjz9+W+U2bdp02zefO3cuM2bM4K233uLrr79m2LBhTJw4kXnz5gHwyiuv8Pbbb0tQKEQ1Z2NjwTNPBdK1gzsuTpacv5zDko8vEX4hG4AxQwPo0dUTT3c1Op2eiIs5rF4Xydnz2WXW9/7sZrRv7UrovNP8faBk9fHIQbXp0MaVekH2FBYa6D10r8l1jg4q3nixEXUD7XB0tCQ9o4A9B1NZtTaSPE1Rue1fOr8FrZo5m6T9uTuJ2e+du8MnIoQQd2737t289957HDlyhPj4eH744QcGDBhQbvmdO3eWuY/0uXPnaNiw4W3f97aDQienyj8T9MyZM6xduxaAQYMGMWLECP73v/8Z84cOHcqnn35a6fcVQlSul5+vT1CAHW9+EE5KmpZHunux+M3mDH/2MClpBcRc1bBo5QWuJuSjVisZ1N+fD+Y2Z8i4Q2Rkma46HtTfr9yTjFQqBTv2JnMmPIvHHvYplW/Qw98HU1i9PpKMzEL8fWyYNrEejg4q5rwfftPPsHnrVT758orxvbbg5hvnCyHuLtVp9XFubi4tWrRg9OjRJnHRrURERODo6Gh87+HhUaH7mn1O4TVKpRJra2ucnZ2NaQ4ODmRmlt5vTAhRfVhZKenW0YPQt05z4kzxv6+fbYiiS3t3Bj7qy8frr7Btl+mq36WfXKJvTx/qBtpx5GSGMT040I7B/f15ZtpRNq/rWOpen30VBUDvHmXvmZqdq+PH30r2O0xM1vLDr1cZOtD/lp8jX6uv0JnLQghRVXr37k3v3r0rfJ2np6dJHFVRZg2LAwMDuXix5Fir/fv3U7t2beP7mJgYfHxK9wYIIaoPCwsFKgsFBTf0rGkL9DRvXHqEQaVS0L+XD9k5Oi5eyTGmq9VK3pjRiEWrLlZacObmakW3Du4cP33rH5cPd/fk5y87sm5ZGyaNCcLGxqJS2iCEqBkMKKrspdVqycrKMnlVxVZ+rVq1wsfHhx49erBjx44KX2/WhSYTJ06kqKhknk/Tpk1N8n/77TeZTyhENafRFHHqXCajhgRwJTaP9IwCHurqSeP6DsRe1RjLdWzryuwZjbFWK0lNL2Dq6yfJzCrZGHry2LqcDs9iz8HbP8GkPLOnN6Jzezes1RbsOZjCO0tvvlfiHzsTiU/MJzW9gKAAO8aH1CE40J6pr5/8120RQogFCxYwZ84ck7Q33niD2bNnV0r9Pj4+rF69mtatW6PValm3bh09evRg586ddO3a9bbrue19CmsS2adQiP+Wr7c1oS80oFVTZ3RFBs5fyiYmTkP9uvaMmBQGgLVaiZurFc6OlvTt6cN9LZwZ9+IxMjIL6dTOjeeeDmLMC0fQ5Bf3OO7Z0q3UQpNrevfwYvLY4FILTa5xdbbE3l5FbT9bxo+sw/HTGSxccbHMsmVpUNeeTxe3ZsyUI5y/lHPrC4QQlcKc+xRGXay8jfZv5F0rsFTPYFnH9JZFoVDccqFJWfr27YtCoWDz5s23fY1ZewqFEHeHqwn5PB96Amu1EjtbFanpBcx5qZHJEXX5Wj1x8fnExedzJiKbDava0udhb9ZvjKF1c2f8vG347evOJvW+9XITTp7N5PlZJyrUnmvH5kXHasjKLmT5O61Y83U0qekFt3V9xKUcCgv1+PvYSFAoxD2iKrekud0AsDK1b9+e9evXV+iaCgWFhYWFjBs3jtdee42goKAK3UgIcffL1+rJ1xbgYKeiXStXVqy5XG5ZBQqsLIunNa/fGM2WP+JN8tcta8vSTy+x99C/HU4u/qK3tLz9L/w6tW2xtFTedhAphBDVzbFjxyq8LqNCQaGlpSU//PADr732WoVuIoS4u7Vr5YJCAdFxGvx8bJg0OoiYuDx++TMBa7WSkYMC2HsohZS0gv+zd9/RTVf9A8ffSZMm6d570RYKbaFUhmyU7WCIouwioFCRqSjDAchysOTnowIiCC7EiQNxIwpC2dBFobSldO+Rpm2S3x+BlNAWWqSkyH2dk/M8ud/7vd+bnEO8vePzwd5OzkP3e+HqouC3v3KAmpm9q2XlVJjMNrq7KrC1keHuqsRCCsEtrAFIz1CjrtDRpYMTTg5y4s6UoK7QEuBrzVOPB3IitojMbMPSjYuTJeuWRbB0dTxxZ0rw8lAy4B539sfkUVRcRYCvNU9PCiThbAkn40T0A0G4UzSnkDSlpaUmB3GTk5M5duwYTk5O+Pn5MX/+fNLT041h/dauXUtAQABhYWFUVlayfft2Pv/8cz7//PNGPbfRy8cPPfQQX331FXPmzGnsrYIg/EfZWMuYMr4Fri4Kikuq+OPvXDZsS0ar1WMhBX8fFff1DcPeTk5xcRVxZ0qYNu8YyanljXrOpDEB3N/Xw/h+y5sdAZg+/xhHTxWhqdQxeKAn0ycHYymXkJ2r4Y/9uWzfmWq8RyaT4O9jhVJh+A9AdbWeDhEOjBjsjUplQXaOhv0xeWz+OAWdCFUoCIIZxMTEmASjvjzmioqKYsuWLWRkZJCaWvO7VllZybPPPkt6ejoqlYqwsDC+++477r///kY9t9EHTZYtW8Ybb7xB37596dChA9bW1ibXZ8yY0agONAVx0EQQBEEQbj/mPGhy7uzZJms7MCioydq+mRo9KGzRokX9jUkknDtX/x6iW0UMCgVBEATh9iMGhebV6OXj5OTkm9qBTZs28eeff3LPPffw+OOP8+mnn7Jo0SI0Gg3jxo2rFddHEARBEAThZtNLmu708e3ihkPSVFZWkpycTFBQEDLZjTWzdu1aXnjhBQYOHMjChQu5ePEia9asYfbs2eh0OlatWoW3tzdPPvnkjXZTEIRbICLMntHDfQkJssHFWWESX9DCQsKTYwPo0tEJLw8VZWXVxBwv4O2tyeTl1326941FbenSwalWnMKVL4TRMtAGB3tLSkqriDleyNtbztXbzmUTR/kzZKAntjYyYhNLWP3OGZP9jOuXRxDZ1sHknp/3ZrPo9bgb/EYEQRBuP40ezZWXlzN9+nS2bt0KQGJiIoGBgcyYMQMvLy/mzZvX4LbeffddNmzYwOjRozl69CidO3fmnXfeYdKkSQD4+Pjw1ltviUGhIDRzKqUFScmlfPdzJssXhJlcUyqktAqyZeunqZxJLsXORsaMycG8+kI4k+ccqdXWo0O9qW9Xy5GThWz7LJXc/EpcnRVMmxjI0nmhRD93rN6+jXnYl8eG+bBsbQJp6eVEPebPmiXtGBV9CLW6JqPSN7svsunD88b3mkpxykQQ7iR6vZgpbPT56/nz53P8+HF+//13lEqlsbxfv358+umnjWorJSWFHj0MwWojIyOxsLCgS5cuxus9e/bkbBOu8QuCcHMcOJzPxu3n2bs/t9a1snIts186wa/7ckhLV3M6oYQ1G5Jo3dIWd1fTYK7BAdY8NtSHFevqziyw4+t0TieUkJWj4VR8Mdt3phEWYoeFRf0/5iOGePPBjlT27s8lObWcZWviUSgsGNDbzaRehUZnDI2TX1hFWbm2nhYFQfgv0iNtstftotEzhV999RWffvopXbp0QXLF+ntoaGijB3BWVlaUlZUZ37u6umJjY2NSp7q6+urbBEG4zdlYWaDT6Skprfn3rVBIeXluG9a8m1RnzMKr2drIGHCPG6fii9Fq655Z9HJX4uKk4ODRAmNZVbWeY6cKCW9tx9e7awJm97/HjQH3ulNQWMmBw/ls/jjFZCZREAThv67Rg8KcnBzc3NxqlZeVlZkMEhuidevWnDhxgjZt2gCQlpZmcj0+Pp6AgIBrtqHRaGrlE9RpK5FaWDaqL4Ig3BqWcglTowL56Y9syq8YdM2YHMSp+GL2/XPtDCbRUS0Y/qA3KqUFp+KLeW7JyXrrOjkafgfyC033HBYUVuLuVrPSsef3LDKyKsgrqCTQ35opUS0IDrBh9ksnbuQjCoJwG2rKNHe3i0bPaXbq1InvvvvO+P7yQHDjxo107dq1UW29+uqrhISE1Hs9NTWVKVOmXLONFStWYG9vb/K6kPRho/ohCMKtYWEhYdFzoUiksOrtM8by7p2duaudA29uTLrG3QYffZnGxJmHmfXiCXQ6PS/Mbn39B189kSiRmJTt2pNJzPFCklPL+eXPHF5cEUunSEdaBdkgCIJwp2j0TOGKFSsYNGgQsbGxVFdXs27dOk6fPs3+/fv544/GxQfs3r37Na8/9dRT121j/vz5tbKrDBr5T6P6IQhC07OwkPDK86F4uSuZsfC4ySxhh3YOeHuo+OGTHib3LJ0XxonYIqYvOG4sKyqupqi4mrSLalLSyvhyS1fCQuw4nVBc65n5l3IXOzlamuQxdrSX15o9vFLC2VKqqnT4eKpIPFt6w59ZEITbh5gpvIFBYbdu3fjrr7944403CAoKYs+ePdx1113s37+ftm3bNkUfr0mhUKBQmG5WF0vHgtC8XB4Q+nipmLHgOMUlpnuFt+9MZdeeDJOybW91Yv17Z/nrYP3LyZdXKizldf+YX8yqIDdfQ6f2jpw5ZxjcyWQS2oc78M7W+gPtt/CzQi6XmgwkBUEQ/utuKMBg27ZtjSFpmlJUVBRpaWn8+uuvTf4sQRBunEopxdtTZXzv6a4kuIU1JaXV5OZpWDovlFZBNjy/5BRSKTg5yAEoLq2mulpvPPF7taycCjKyKgBo09KWNq1sORFbRElpNV4eKiaPCeDCRTWn4mtmCT98uxPvbj3H3kvxDT/7Jp1xI/y4cLGctItqxj/qh0ajZc8f2QB4eSgZcI87+2PyKCquIsDXmqcnBZJwtoSTcUVN9p0JgtC8iJnCGxgUHjlyBLlcbpwV/Prrr3n//fcJDQ1l0aJFWFrevFk6Ly8vpNLb5yi3INypWgfbsn5Fe+P7GZODAfj+l0w2f3Senl1cANiyvqPJfdPnH+PoqYYNvDSVOnp3dWHS6ACUSgvyCjT8c7iAl1+Lpaq6ZoOgv48V1tY1P20ffp6GwlLKnOiW2NrIiU0sZvZLJ4wni6ur9XSIcGDEYG9UKguyczTsj8lj88cp6ESoQkEQ7iCNzn3cqVMn5s2bx8MPP8y5c+cIDQ1l+PDhHDp0iAceeIC1a9c2UVcbTuQ+FgRBEITbjzlzH8edTW+yttsEeTdZ2zdTo6fhEhMTad++PQCfffYZvXv35qOPPmLLli18/vnnje5AXFwc77//PvHx8YAhDE10dDQTJ04Uy8aCIAiCINwSer2kyV63i0YvH+v1enSX1lR+/vlnHnzwQQB8fX3Jza2dzeBadu/ezdChQ7GxsaG8vJwvv/yS8ePHExERgV6vZ+DAgfz444/06dOnsd0UBEEQBEEQGqHRg8KOHTuydOlS+vXrxx9//MHbb78NQHJyMu7u7o1qa8mSJcydO5elS5fyySefMHr0aKKjo1m2bBkACxcuZOXKlWJQKAi3iYgwe0YP9yUkyAYXZwXzl53izwN1nx6eO60lQwd5sW5jEp99U7NsM2SgJ/17u9EqyAZrKxmDRu6jtKwmfI2Hm4IJj/lzV4QDzg6W5OZX8uPvWXywI5XqS3sL7+vrzsJZdccvfHDs3xQWGQ61BPpbM3tqMKEtbSkurebr3Rls+STlZn0dgiDcRsRBkxsYFK5du5YxY8bw1VdfsXDhQoKDDRvKd+7cSbdu3RrV1unTp/nggw8AePTRRxk3bhwPP/yw8fqoUaN47733GttFQRDMRKW0ICm5lO9+zmT5grB66/Xs4kxoKzty8jS1rikUUv45ks8/R/KZGhVY67q/jxUSqYTX3zpD+kU1Lfytef7pVqiUFry12RBm5pc/c/jncL7JfQtntcbSUmocEFqpLFjzSjuOnihk8ttH8PW2YuGsECoqtHzy1YV/8zUIgiDclho9KGzXrh0nT9ZOK/X6669jYWFxwx2RSqUolUocHByMZba2thQViZAQgnC7OHA4nwNXDcau5uJkyewpLXnm5RO89lLt2KaXZw0jw+3rvP+fIwX8c6Qml/HFrAo+/jKNh+73Mg4KKyt15FfWHB12sJNzVzsHVq5PMJYNuMcNS7mUZWvjqarWk5xajp+3iseG+YhBoSDcgcRM4Q0cNKmPUqlELpc36p6AgACSkmrSWu3fvx8/Pz/j+7S0NDw9PW9WFwVBMDOJBF6c05qPv0gjObX8prVrYy2rFRD7SoP6uFOh0fHbXzX7nsNb23HsVKFJOJt/jhTg6qzA011ZVzOCIAj/aQ0eFEqlUiwsLGq9HB0d6dKlC1988UWjHx4dHY1WW7NXKDw8HJmsZvLyhx9+EPsJBeE/ZMzDvmh1ej7bdfNCP3h5KHn4QW++2n2x3joP9Pfg571ZVF4xe+jkaEnBVanuLqe+c3IQWZEE4U6jR9Jkr9tFg5ePv/zyyzrLCwsLOXjwIGPHjmXr1q2MGDGiwQ+fOnXqNa9fPnAiCMLtLyTIhhFDfJg46/BNa9PZyZJVi9vy2185fLsns846YSF2tPCzZunq+FrXrg7SKqn3iiAIwn9fgweFQ4cOrfdaVFQUoaGhvPHGG40aFAqCcOdoF2aPo72czzd3MZbJLCQ8PTGIR4f4MGLyP41qz9nJkvXLIjgdX8xr/5dYb73BAzxIPFtCwtlSk/L8gspaM4KOl97XlXJPEIT/ttspnmBTuaHcx3UZMGAAL7zwws1qThCE/5gff8si5liBSdnqJe348bcsvvu57lm++rg4WbJ+eQQJSaUsX5dAfXmZVEopfXq48s4HybWunYovZsr4FshkEmMom86RjuTkaYz5lgVBuHPobqNl3qZy0waFarUapVJszhaEO5lKKcXbU2V87+muJLiFNSWl1WTlaGodBqmu1pNXUElautpY5uQgx8nREm8vQzuB/jaUqw33l5RWG2YIV0SQlaPh/zafxcGu5oDb1TN8fXq6YWEh4affs2v19ac/snl8VAALZ4XwwY5UfL1UjBvhJ+IUCoJwx7ppg8KNGzcSGRl5s5oTBOE21DrYlvUr2hvfz5hsiGP6/S+ZLF+bUM9dpobd58XE0QHG9/971dDesrXx/PBLFp0jHfH1ssLXy4qvtnY1uffqvOcP9vfgj/25lJTVPplcVq5l9osnmDM1mE1rOlBSWsWnX10Q4WgE4Q51Ox0IaSoSvb6+hRdTc+bMqbO8qKiImJgYzp49y59//tksBoZX/4dBEARBEITmb9+u3mZ79tEzjUvV2xiRLV2arO2bqcEzhUePHq2z3M7OjkGDBvHUU0/h7+/fqIcnJibSsmVLJBLD6Hzfvn288cYbnDlzBk9PT6ZPn37NAy6CIAiCIAg3gzho0ohB4W+//XbTH96mTRsyMjJwc3Pj999/p2/fvjzwwAOMGTOGI0eOMHz4cL7//nsGDhx4058tCHe6xuQpBujV1YWH7vMiONAaS7mU5NRyNn90noNHaw6PWFhIGDfCj/v6uOPirCAtvZy3t5wzyUBiIYWJowPof48bzg6W5BVU8v0vWWz9NMV4YMTRQU70hEA6t3fExkbG8VNFrHk3iQsZNXsP505rSccIR1ycLCmv0HIqrpi3t54j9UJNnaYwcZQ/QwZ6YmsjIzaxhNXvnDEJxO3loeTpiUG0DbXDUm5I2bfm3SQKxIlmQRCauZuW0eRGXLlyvXTpUqZOnco333zDggUL2LlzJ8899xzLly83Yw8F4b/rcp7i1e8mXb8y0D7MnkPHCpi7+BSTZh3hyIlCXn0xnJaBNsY6T44NYOggT9a8m8S4pw7x1Q8XWb4gzKTOmEf8GHqfF2veSWLMU4f43/vnGP2QD4886G2ss2JhOF7uSuYtO83jMw+TmVPB2qXtUCpqfrIunzwe89Qhnnn5JBIJrFnSDum/+FVbMCuEiaPqX/EY87Avjw3zYfW7SUyec4S8gkrWLGmHSmVI8alUSFmzpB16vZ6ZC08Q/dwxZDIpr74YjkRMQghCsyaCV5t5UHil2NhYxo8fb1I2btw4Tp8+baYeCcJ/24HD+Wzcfp69+xu2j+bNTWf56Is04s+UcCFDzYZtyVzIUNO9s7OxzsB73dm2I5UDh/O5mFXBVz9k8M/RAkYO8zHWCWttx74DueyPySczW8Pvf+dy8FgBIS1tAfD1UhHe2o5Vb58h/kwJaelqVr19BpXSgn693YztfPNjBsdPF5GZrSHxbCkbt5/H3VWJh1tNFAQXJ0sWP9eGHz7uxncfdmPFwjA83BQ3/J2NGOLNBztS2bs/l+TUcpatiUehsGDApX61DbXHw03JsrUJnEsp41xKGSvWJhDayo4O7Rxu+LmCIAi3gtkHhSUlJRQXF6NSqVAoTH+sLS0tUaubdilIEIQbI5GAlcqC4pKaZVG5XIqmSmdSr1Kjo12ovfH9ydgiOkQ44nsp5ExwgDXt2thzICbP2AaA5oqUdDodVFWbtnMlpULK/f08uJipJjtXA4BCIWX98gjUai3T5h3nqeePoa7QsmpxO2Syxv/l7uWuxMVJYbJcXlWt59ipQsJb2wFgKZOiB6qu+A40VTq0Wn29fRcEoXnQ6yVN9rpd3LSQNDeqVatWgGEp+fDhw7Rv39547fTp03h7e9dzpyAI5jRymA9KhQW/7ssxlh08ms/IYT4cP1VEeqaaDhGO9OjijFRa86O4fWca1lYyPny7EzqdHqlUwoZtyfy819BOyoVyMrIqmBrVgtf/7wxqjZaRw3xwcVLg7GiageSh+72InhCIlcqC82llzHrxhDEQdb+ebuj0sHJ9TbaT5esS2P1JdyLbOnDoqGkg7etxcryc7cQ0X3JBYSXul2YnTycUU1GhJXpCIO9uS0YCRE8IxMJCgrOTyKcsCM3Z7bTM21TMOii8+vCKp6enyfvz58/zxBNPXLMNjUaDRqMxKdNpK5FaiB9gQWgq/Xq5MnF0APOXnqKwqGamcN2Gszw3vRUfvt0JPXAxQ833P2dyfz8PY52+PV0ZcI8bi9+IIzm1nJaB1syYHExufiW7f81Cq9XzworTzJsRwg+fdKdaq+fwsQL2x9Q+BLPn9ywOHS3A2cmSUQ/58MrzoUQ/d5TKKj0hwTZ4e6rYs6OHyT2WcineHkoOAf17uzF3WqsrrknQ62HkQ77GstffSuSnP64Ifl0rYbLEWFZYXMWLr8bybHRLHhnsjU4PP+/NJiGpBJ1O5FMWBKF5M+ugsHfva8cjmjlz5nXbWLFiBYsXLzYp820ZhV/I4/+qb4Ig1K1PD1fmzQjhxZWxxBwvNLlWWFzFgmWnsZRLsLOVk5tfSXRUC5O0cU89HsiHO9P45U/DzOC5lDI8XJWMG+HH7l+zAEg4W8rjMw9jbWWBXCalsLiKDW9EEp9UYvK8snItZeVqLmSoOZ1QzA8fd6dXVxd+3puDRCIhMamExavian2GywPZfQfziE2MMZZHTwgkJ0/Dzl3pxrLLWVLyCwwzhE6OhhPTlznay01mDw8dLeCxJw9ibydDq9VTWqbl6w+6cjFTpM4ThObsdlrmbSpm31P4b82fP5+ioiKTl0/wGHN3SxD+k/r1cmXhrBAWvxHH/pj8eutVVunJza/EwkJC726uJqFulAoLdFfFzNfq9Ejr+D0uK9dSWFyFj6eKkGBb/vyn/pA5YJi0u7wnMfFsCT5eKgoKq0jPqDB5lZVrAVCrtSbl5WotJSXVJmVqtaHuxawKcvM1dGrvaHyeTCahfbgDp+KLa/WlqLia0jItd7VzwNFezr6D1+67IAiCuZl9T+G1REVFkZaWxq+//lpvHYVCUeuAilg6FoTru16e4injW+DqbMnSNYb0dP16ufLC7Nas23iW0/HFODkYcg5rKnXGQVZoK1tcnBUknSvFxVnBxNH+SKXw0Repxuf8dSiP8Y/6k5WjITm1jFaBNjw2zIfvf8o01rm3uwuFRVVk5WgIDLBm5hPB/PlPrnEfoJe7kj49XTl0tIDC4ipcnBSMecQXjUZnHKzu+SOb0cN9WflCOJs+PE9OngZ3VwW9u7rw0Rdp5OSZ7g1siM++SWfcCD8uXCwn7aKa8Y/6odFo2XPF8vL9fd1JuVBOQVEV4a3tmPlEMDu+vmCS31kQhOZHd/0q/3nNelDo5eWF9N8EHRMEoV7Xy1Ps7GSJu2tNeJehg7yQyaQ8E92SZ6JbGsuvzGtsaSnlibEBeHmoUFdoORCTxyur4ykt0xrrr3k3iSfGBPBMdEsc7Q1LzN/szuD9T1KMdZydFDw9KQinS8Gtd/+axZZPa65rqnREhNnz6BAfbG1k5BdWcvx0EVOfO2pcGtZodEybd4zoCYEsWxCKlUpGbp6Gw8cLjIPYxvrw8zQUllLmRLfE1kZObGIxs186YZxNBPDzsWJKVCB2NjIysyv4YEcqn34t8ikLgtD8NTj38e1E5D4WBEEQhNuPOXMf74+rvQ3kZunaxq7J2r6ZzD4NFxcXx/vvv098fDwA8fHxREdHM3HixGsuGwuCIAiCIAg3j1mXj3fv3s3QoUOxsbGhvLycL7/8kvHjxxMREYFer2fgwIH8+OOP9OnTx5zdFARBEAThP07EKTTzoHDJkiXMnTuXpUuX8sknnzB69Giio6NZtmwZAAsXLmTlypViUCgITSAizJ7Rw30JCbLBxVnB/GWnTE4J16V9uD3TJwUR4GdNXr6GDz9P4+vdGcbrvbq6MH6EH96eKmQyCRcuqvnkqzR+/C3bpJ2H7vdi1HAfnB0VnE8tY93Gs5yILTJenzjKn7693HBzUVBdrSMhqZQN25KJTawJSePkIOepiUF0au+IlcqC1PRytu1I5fe/G5a270ZNHOXPkIGe2NrIiE0sYfU7Z0hOLTepExZix5PjAggNsaO6Wk9ScinPLDpJZaXYyi4IzZUISWPm5ePTp08zYcIEAB599FFKSkp4+OGHjddHjRrFiRMnzNQ7QfhvUyktSEouZfW7SQ2q7+mu5PWX23L8dBETZx7mg89SmfVkML27uRjrlJRU8cGOFKbOPUrU9Bi+/zmT+TNb0zmyJoxLnx6uzJgcxAc7Upk48zDHTxfxxqK2uLvWRBFIu6hmzTtniHo6hqeeP0ZGdgWrl7TDwU5urPPinDb4eauY98opop6OYe/fuSx+LpSWgTY3/J0smBXCxFH+9V4f87Avjw3zYfW7SUyec4S8gkrWLGmHSmVhrBMWYseqxW05dKyAJ585whNzjvD5t+noRfBqQRCauWZz+lgqlaJUKnFwcDCW2draUlRUVP9NgiDcsAOH8zlwuP5Yg1cbNsiTrJwK3tx0FjCko2sdbMuoh3z549Ls3NFTpv9eP9uVzqC+7rQLtTfmDB45zIdvf8rk2z2GEDRvbjpL57scGXafF+9+kAxgmkEEWL/pLIMHeBIUYM3hE4UAhLW2Y9XbicSdMcwebt2RyqNDfWgVZMOZc6UAuDhZMn1yEJ0jHdHp4ERsEes2JpGZbZoFqaFGDPHmgx2p7N1v+LzL1sTzzbZuDOjtZpwxnTE5iJ270tm+M81434UMEY5GEJo7sXxs5pnCgIAAkpJqZin279+Pn5+f8X1aWlqt1HeCIJhHWGu7WvmCDx7Jp3WwDRYWdf+YdmjngJ+3FcdOGwaLMpmEVsG2HDpqOhg9dLSA8HpO58lkEoYO8qSktJqk86XG8pOxRfTp6YatjQyJxJA+Ty6XcvRkIQAKhZT1yyNQq7VMm3ecp54/hrpCy6rF7ZDJGv/j7+WuxMVJYRzcAlRV6zl2qpDw1oa+O9jLCWttR0FRJW+/1p5vPujK+hURtAu9PU4eCoJwZzPrTGF0dDRabU18r/DwcJPrP/zwg9hPKAjNhLOjJf8UVpmU5RdWIZNJcbCTG1O/WVtZ8OWWrljKJWh1sPrtM8QcMwyk7O3kyCwkxtRxV7bj7GAadL5bJycWzQ1FqZCSV1DJ7JdOUFRcbbz+0muxLHkulB8+7k51tY4KjY4Fy08b08n16+mGTg8r1yca71m+LoHdn3Qnsq1DrQHu9Tg5Wl7qq2nQ64LCStzdDPEcvT0M/ztxVABvbT7LmeQyBvVxZ+3SCMZPixEzhoLQjIkdHmYeFE6dOvWa1y8fOBEEoXm4OqypRFK7vFyt5fGZMaiUFnSMcOTpSUFczFSbLC1fHR1VIoGrf4+PnCjk8ZkxONjJGTzAkyXPt+HJZ2qCUz8xtgW2NjJmLjxOUXEVPbu48MrzoUybd4xzKWWEBNvg7aliz44eJu1ayqV4eyg5BPTv7cbcaa2uuCZBr4eRD/kay15/K9F0Ofvqjl7RecmlL+Tr3Rl8/4shj/OZc6V0aOfAA/09jMvjgiAIzVGz2VMoCELzlldQibOj6Wyeo72c6modRSU1M3h6PaRnGGbrkpLL8Pe1YuwIP46eOklRcRXVWj3OjvJa7Vw9A1eh0RnzD59OKOHjdzvxYH8Ptu9Mw8tDySODvRk37ZDx5G/S+TIiwuwZ/oAXb/zvDBKJhMSkEhaviqv1WS4PLPcdzCM2McZYHj0hkJw8DTt3pRvLLs9q5l+aCXVytDTOil7d98vl59PKTJ6XcqHc5CCNIAjNj9hT2AyCVwuCcHs4HV9Mx/aOJmWdIp2ITypFq61/3UWCYXYOoLpaT2JSCZ0iTdvp2N6RU9fJJiBBYmxHqTCc9tVdFeFFq9MjvfS7nni2BB8vFQWFVcbB5eXX5TR3arXWpLxcraWkpNqk7HIKu4tZFeTma+h0xXcgk0loH+7AqXhD3zOyKsjJ0+DnbWXSL18v1Q0fbhEEQbhVxKBQEO5QKqWU4BbWBLewBgwhZ4JbWBtntKaMb8ELs0OM9b/anYGHm5KnJwXh72PFA/08eLC/Bx9/WXPKduwjvnRs74iXuxI/HxWPDfVhUB93fvw9y1jnk68u8GB/Tx7o54G/jxXTJwfh7qrkqx8uAqBUSHlyXAvCQmxxd1XQKsiG56e3wtVFwW9/5QCGmbe0i+XMndaSNi1t8fJQMnKYD53aO7L3UqzFPX9kU1RcxcoXwmkXao+nu5L24fbMfCIIV2fTGc+G+uybdMaN8KNXF2da+FmxcFYIGo2WPVcsL3/0RRqPDPbmnm4ueHsqmTwmAH8fK779KeMaLQuCYG56vaTJXrcLsXwsCHeo1sG2rF/R3vh+xuRgAL7/JZPlaxNwdrLE3VVpvJ6RVcHcxSeZPjmI4Q94kZuvYe2GJGM4GjDEPnwmOhg3ZwWaSh0pF8pZsiqeX/flGOv8ui8Hezs5E0b64+xkSXJKGXMXnyQrxzCTptPp8fdRcV/fMOzt5BQXVxF3poRp844Zl4q1Wj1zF51i6oQWvPpiOCqVBekZapatjTeG2dFodEybd4zoCYEsWxCKlUpGbp6Gw8cLjDOFjfXh52koLKXMiW6JrY2c2MRiZr90wjibCIaBo8JSyvTJQdjZyklKLmX2SyeMB2AEQWiert7rfCeS6K/eOf4f0GPwH+bugiAIgiAIjbRvV2+zPfu3k00XHeDetqoma/tmEjOFgiAIgiDc8XTioIl59xS2bduWV155hbS0tOtXFgRBEARBEJqMWZePpVIpTk5OFBYW0q9fP5544gmGDh2KTPbvJjDF8rEgXJ9KZcETYwLo1dUFR3s5iedKWbfxLPGX0sbVZfj9Xgx/0AtPNyVZORo+2JHK7t9qDpH06urC+BF+eHuqkMkkXLio5pOv0vjxt5qDGBZSmDg6gP73uOHsYAjv8v0vWWz9NMW4p6e+JaS3Np/l4y8vADBkoCf9e7vRKsgGaysZg0buo7TsxvYKNsbEUf4MGeiJrY2M2MQSVr9zxrjX8bKwEDueHBdAaIgd1dV6kpJLeWbRSSordfW0KggCmHf5+OcTTRchoF+72yMkldmXj0+cOMHBgwfZvHkzI0eOxNHRkfHjxzNp0iTatGlj7u4Jwn/WvOmtCPS35pXV8eTmaxh4jztrX2nH2KcOkZtfWav+sPs8mRLVglfXJxJ/poQ2rWx5/ulWlJRW89chw4nfkpIqPtiRQsoFNVXVOrp3cmb+zNYUFFYZ08ONecSPofd5sWxNPMmpZbQOtmXBzBDKyqr57FJ8wCHj/jZ5dpcOTsybEWJyqEWhkPLPkXz+OZLP1KjAm/KdLJgVQmZWBZs/Tqnz+piHfXlsmA/L1iaQll5O1GP+rFnSjlHRh4yHTcJC7Fi1uC3bd6aydkMSVVV6gltYoxfpEgRBaObMPiiUyWQMGzaMYcOGkZmZyfvvv8/777/PmjVruPvuu5k8eTITJ040dzcF4T/F0lJK726uzF96iuOX8hJv/jiFnl1ceOh+LzZuP1/rnoH3uvP17gzjSeKLWRWEhdgx5hFf46DwyqwlAJ/tSmdQX3fahdobB4Vhre3YdyCX/TGGU8KZ2Rr69XYjpKWt8b6r0+D16OLCkZOFXMyqOcH72TeGAWRkuH29n9PFyZLpk4PoHOmITgcnYotYtzHphmMGjhjizQc7Utm73zA4XbYmnm+2dWNAbze+3m0IOTNjchA7d6WzfWfNthiR3k4Qmr//3rHbxjPrnsLLKaEu8/DwYP78+SQmJvLLL78QFBTEjBkzzNQ7QfjvsrCQILOQ1FrO1FTqaBda9yDLUi6ts36blrZYWNS9QbtDOwf8vK04drpmsHgytogOEY74ehlO4wUHWNOujT0HYvLqbMPRQU63jk5891Nmgz8fGGYS1y+PQK3WMm3ecZ56/hjqCi2rFrdDJmv8hnIvdyUuTgrj4BagqlrPsVOFhLe2A8DBXk5YazsKiip5+7X2fPNBV9aviKBdqF2jnycIgnCrmXWm8FrbGe+55x7uueceiouvneVAo9Gg0Zj+1a/TViK1uLHgtIJwJ1CrtZyMK2LCSH/OXyinoLCSfr3cCG1ly4WLdc9q/XOkgAcHePDngVwSzpYSEmzDA/08kMulONjJjSnerK0s+HJLVyzlErQ6WP32GWKO1Qyktu9Mw9pKxodvd0Kn0yOVStiwLZmf9+bU+dz7+nhQrtbyx991X69Pv55u6PSwcn2isWz5ugR2f9KdyLYOHLpicNcQTpdS/F2djq+gsBJ3N0M8R28Pw/9OHBXAW5vPcia5jEF93Fm7NILx02LEjKEgNGMizZ2ZB4VRUVGoVNeO3WNnd+2/sFesWMHixYtNynxbRuEX8vi/7p8g/Je9sjqe+TND+HprV6q1ehLPlvDTH9m0CrKps/6WT1NwdpTz7huRIJFQUFjJD79kMuYRP7RX7JcrV2t5fGYMKqUFHSMceXpSEBcz1cal5b49XRlwjxuL34gjObWcloHWzJgcTG5+Jbt/zar13Af6e7Dn92wqqxq3thMSbIO3p4o9O3qYlFvKpXh7KDkE9O/txtxpra64JkGvh5EP+RrLXn8rkZ+uyFjC1d2QSIxll1c/vt6dwfe/GD7LmXOldGjnwAP9PXj3g+RGfQZBEG4dse3XzIPC999//1+3MX/+fObMmWNSNmjkP/+6XUH4r7uYWcH0+cdRKqRYW8nIK6hk8XNtyMiqO/NGZaWOFW8m8tpbZ3ByMMwMDhnoSVl5NUXFNXsA9XpIzzC0kZRchr+vFWNH+HH01EkAnno8kA93pvHLn4aZv3MpZXi4Khk3wq/WoLBdqD3+Pla8/Gpsoz+fRCIhMamExavial0rLDL0d9/BPGITY4zl0RMCycnTsPPSgReo2d+Yf2km1MnR0jgrCuBoLzfOHl4uP59WZvK8lAvlxvSBgiAIzZXZD5r8WwqFAoXC9MdWLB0LQsNVaHRUaCqxtZbROdKJt7ecu2Z9rVZPTp5h8NO3lxt/H8q75gZtCYbZucuUCgt0V92g1emR1rFy8+AAD+LPlJB0vqz2xetIPFtC356uFBRWUa6uO1SNWq0l/Ypr5WotJSXVxkHtlS5mVZCbr6FTe0fOnCsFQCaT0D7cgXe2Gr6zjKwKcvI0+Hlbmdzr66XiwOHGLVcLgnBr3U45iptKsx4URkVFkZaWxq+//mrurgjCf07nSEckEkhNV+PtqWLa44GkpZfz3c+GAx1TxrfA1dmSpWsSAMPApk0rW2ITSrC1kfHYMB8C/axZtibe2ObYR3yJTyrlYoYamVxC1w7ODOrjzhtvnzHW+etQHuMf9ScrR0NyahmtAm14bJgP3191kMRKZcG93V35v/fO1tl/Jwc5To6WeF86sBLob0O5upqsHA0lpdXs+SOb0cN9WflCOJs+PE9OngZ3VwW9u7rw0RdpxoFtY3z2TTrjRvhx4WI5aRfVjH/UD41Gy54rlpc/+iKNSaMDSEou5UxyKff18cDfx4oXVjZ+tlMQBOFWataDQi8vL6RSsx6QFoT/LBtrmWHg56KguKSKP/7OZcO2ZLRawyyes5Ml7q5KY32pVMLIYT74+VhRXa3nyMlCpj531CS8i0ppwTPRwbg5K9BU6ki5UM6SVfHGMDYAa95N4okxATwT3RJHezm5+ZV8szuD9z8xjQ3Yr5cbEgn8vDebugy7z4uJowOM7//3ansAlq2N54dfstBodEybd4zoCYEsWxCKlUpGbp6Gw8cLKCu/sSDXH36ehsJSypzoltjayIlNLGb2SyeMMQrBMHBUWEqZPjkIO1s5ScmlzH7pBBcz616WFwSheRAhacyc0aSpiIwmgiAIgnD7MWdGk++PVF2/0g26/y55k7V9M5l9Gi4uLo7333+f+HjDElR8fDzR0dFMnDhRLBsLgiAIgnBL6JA02et2Ydbl4927dzN06FBsbGwoLy/nyy+/ZPz48URERKDX6xk4cCA//vgjffr0MWc3BUEQBEEQ/vPMOihcsmQJc+fOZenSpXzyySeMHj2a6Oholi1bBsDChQtZuXKlGBQKwm0iIsye0cN9CQmywcVZwfxlp/jzQE2mEpVSytSoQHp2ccHeVkZGdgU7d6Xz1Q8Zdbb3xqK2dOngVKudy+QyCRtW3UXLQBsmzIghKbnmlHLrlrZMjWpBSJAtoCfuTAn/e/+cSR2AUQ/5MGSgJ+5uSgoKK/nqhwy2fZZ6c74QQRBuG/+9zXSNZ9bl49OnTzNhwgQAHn30UUpKSnj44YeN10eNGsWJEyfM1DtBEBpLpbQgKbmU1e8m1Xl9+uRg7r7LiVdWxTHmqUPs+DqdWVNa0uNu51p1Hx3qfc2sR2CIeZibXzuPsUplwerFbcnK0fDks0d46vljlJVrWb24nUlKvplPBvHgAE/+b/M5xkQf4vlXThGXeO0sSoIg/Dfp9ZIme90uzL6n8DKpVIpSqcTBwcFYZmtrS1FRUf03CYLQrBw4nM/G7efZuz+3zuvhre344ddMjp4qIjNbwzc/ZnA2uZTWwbYm9YIDrHlsqA8r1iXU+6wuHZzoFOnIW5trx1X081ZhZyvnvQ/Pk5auJjm1nPc/TsHJ0dIYRNrfx4qH7vNi3tJT/HUwj4ysCpKSy4g5XnjjX4AgCMJtzKyDwoCAAJKSamYU9u/fj5+fn/F9Wloanp6e5uiaIAhN4ERsET3udsbFyRBgPrKtA75eKg4ezTfWUSikvDy3DWveTTJmE7mao4Oc555uxSur46nQ1A4vk5qupqCokgf7eyCTSbC0lPJgfw/OpZSRlW0IDdO9szMXMyvo3smZHZs689mmu3l+eitsbZp1pC5BEJqITt90r8bau3cvgwcPxsvLC4lEwldffXXde/744w86dOiAUqkkMDCQd955p9HPNeugMDo6Gq225gc9PDwcmazmB/mHH34Q+wkF4T9k7YYkzqeW89XWrvz+ZU9WLW7LqnfOcCK2Zsl2xuQgTsUXs++f2nsIL1s4qzVf/3CRhKTSOq+r1VpmLDjOgHvc+WVnT37a0YPOdzkyd/FJtDpDHS8PJe5uSu7t7srS1QksXxtPSJANS+eF3tTPLAiC0FhlZWVERETwf//3fw2qn5yczP3330/Pnj05evQoCxYsYMaMGXz++eeNeq5Z/ySeOnXqNa9fPnAiCMJ/w4jB3oSF2PH8klNk5lQQEWbPM1NbkpdfSczxQrp3duaudg5MnHm43jYeGeyNlcqCbTvrPwxiaSll/owQTsYVseiNOCykMPIhX15/uS2T5xyhslKHVAIKSylL18STdlENwMr1iWxe2wFfbxVp6eqb/vkFQWi+mtNBk/vuu4/77ruvwfXfeecd/Pz8WLt2LQBt2rQhJiaGN954w+SsxvWIdRJBEG4JS0spT45rwYLlp9kfY1guPnu+jJaBNox6yJeY44V0aOeAt4eKHz7pYXLv0nlhnIgtYvqC49zVzoGwEDt+/aKXSZ1Nazrw0+9ZLFubQP/ebni4KZky96jxh37xG3H88HF3et7tzC9/5pBbUEl1tc44IAQ4n1YOgLurUgwKBUG4aTQaDRqN6aE4hUKBQqG4Ke3v37+fAQMGmJQNHDiQ9957j6qqKuTyhgXPFoNCQRBuCZmFBLlcWuuvcZ1Oj+TSRpbtO1PZtcc0PM22tzqx/r2z/HXQsJy8bkMSG7clG6+7OCtYs6QdL78WS2yCYRlaqZCi0+tNnqXXGd5LpYaTgCfjipHJpHh5KI0p6Pwu5VG+vO9QEIQ7h74Jg0yvWLGCxYsXm5S9/PLLLFq06Ka0n5mZibu7u0mZu7s71dXV5ObmNvh8hhgUCoJw06iUUrw9Vcb3nu5KgltYU1JaTVaOhqMnC3nq8UA0Gi2ZORrah9sz6F531r93FoD8wqo6D5dk5VSQkVVx6f+b/rWtrjDsS07PUJOTVwnAoWMFPPV4EM9EB7Nz10WkUhjziB9arZ4jJwoBiDlWQEJSCfNnhvDmxrNIJTBnaksOHs03mT0UBEH4t+bPn8+cOXNMym7WLOFlEonpoPZySK+ry69FDAoFQbhpWgfbsn5Fe+P7GZODAfj+l0yWr03g5ddimRIVyEvPtsHORkZmjoYN287XG7z6RqVeUPP8K6eYOMqfd16PRK/Xk3iulGcXnSCvwDBw1OvhuVdOMXtKMG+tiECt0XHgcD7/d2mAKgjCneVGTgk31M1cKq6Lh4cHmZmZJmXZ2dnIZDKcnWvHga2PGBQKgnDTHD1VRI/Bf9R7Pb+w6pqxB+tyrfYAMrM1ddaJOVZAzLGCa96bl1/JCytiG9UfQRCE5qZr167s2rXLpGzPnj107NixwfsJoRkFr9ZqtWRlZZGbW3fQW0EQBEEQhKai1zfdq7FKS0s5duwYx44dAwwhZ44dO0ZqqiHqwvz58xk/fryx/tSpU0lJSWHOnDnExcWxefNm3nvvPZ599tlGPdfsg8LvvvuOXr16YW1tjZeXF+7u7jg4ODBu3DjjhxcEQRAEQWhKzWlQGBMTQ2RkJJGRkQDMmTOHyMhIXnrpJQAyMjJMxkgtWrTg+++/5/fff6d9+/a88sorvPnmm40KRwMg0V8vuWgT2rZtG9OmTWPSpEkolUref/99Hn/8cfz9/fnkk084ffo0f//9Ny1btmxUu9dbbhKEO52FFCaODqD/PW44O1iSV1DJ979ksfXTlHp/wJwdLXl6UiAhQbb4eKnYuSudNzeZ7r/r1dWF8SP88PZUIZNJuHBRzSdfpfHjb9nGOhNH+TNxdIDJfXkFlQwdv9+kTt9ebri5KKiu1pGQVMqGbcnEJpYY63h5KHl6YhBtQ+2wlEv550g+a95NoqCeLCg3y8RR/gwZ6ImtjYzYxBJWv3OG5NRys/dLEP4L9u3qbbZn79iva7K2H+1q9jm4BjHroLBNmzYsWrSIxx57DDCMjB966CFSU1ORSCSMHDmSyspKvvjii0a1KwaFgnBt4x/149GhPixbE09yahmtg21ZMDOEjdvP89mu9Drv8XBT8NhQHxKSSnl0qDfHThXVGhRGhttjayMj5YKaqmod3Ts5M21SEM8tPsnBo4b9fRNH+XNPd1dmvXDceJ9OB4XFNYOm/r3dKCis5GJmBQqFlEeH+nBvd1dGPnmQwuIqlAopW9d3JCm5lPc+SgFg8tgAXJwsmfLs0Rv6yxxgwawQMrMq2PxxSp3Xxzzsy/hH/Vi2NoG09HKiHvOnfZg9o6IPoVZrm6xfgnCnMOeg8JO/m+4f6MhuTRfu5mYy69A1JSWFu+++2/i+Y8eOZGZmkpFhOIk4Z84cfvvtN3N1TxD+s8Ja27HvQC77Y/LJzNbw+9+5HDxWQEhL23rvyczWsG7jWXb/lkVZee18w2A4aLL3QB4pF8q5mFnBZ7vSOXu+lHah9ib1tFq9MfxMfmGVyYAQ4Kc/sok5XsjFrAqSU8tZv+ksNtYyggKsAWgbao+Hm5JlaxM4l1LGuZQyVqxNILSVHR3aORjbcXGyZPFzbfjh425892E3ViwMw8Ptxk8AjhjizQc7Utm7P5fk1HKWrYlHobBgQG+3RvVLEAShOTLroDAgIICYmBjj+yNHjiCVSo0BGJ2cnKiqEksugnCznYwtokOEI76XgjUHB1jTro09B2Lqzzd8Izq0c8DP24pjp4tMyn28VHy1pQs7NnVm0dw2eLkr621DJpMwdJAnJaXVJJ035Dq2lEnRA1VVNcs9miodWq3eOABVKKSsXx6BWq1l2rzjPPX8MdQVWlYtbodM1vi/2r3clbg4KYwzngBV1XqOnSokvLVdg/slCELz1Jz2FJqLWUPSTJs2jcmTJ3Po0CGUSiWbNm1i3LhxWFhYAPDPP//QqlWra7ZRV+oYnbYSqYVlk/VbEG5323emYW0l48O3O6HT6ZFKJWzYlszPe3P+ddvWVhZ8uaUrlnIJWh2sfvuMSWiY2MQSQ77hdDVODnKiHvPn7dcjGTftEMUl1cZ63To5sWhuKEqFlLyCSma/dIKiYsP10wnFVFRoiZ4QyLvbkpEA0RMCsbCQ4Oxk+Lffr6cbOr0hn/Fly9clsPuT7kS2deDQFYO7hnByNLSbX1hpUl5QWIm7m7LB/RIEQWiuzD4olEqlbN++HY1Gw4QJE3jxxReN1zt37sxHH310zTbqSh3j2zIKv5DHm6TPgvBf0LenKwPucWPxG3Ekp5bTMtCaGZODyc2vZPevWf+q7XK1lsdnxqBSWtAxwpGnJwVxMVPN0VOG2cIDh/ONdc+lwKn4Yj7deDf39fHg068vGK8dOVHI4zNjcLCTM3iAJ0ueb8OTzxylsMiw3Pziq7E8G92SRwZ7o9PDz3uzSUgqQXcpAm1IsA3enir27DDNo2wpl+LtoeQQhr2Lc6e1uuKaBL0eRj7kayx7/a1Efvqj5qAMV//VL5EYyxrSL0EQmqfbaUavqZg9eHV0dDTR0dF1XmvIqeO6UscMGvnPTembIPxXPfV4IB/uTOOXPw0zg+dSyvBwVTJuhN+/HhTq9ZCeYUhJl5Rchr+vFWNH+HH01Mk661dodJw7X4aPl6pWeXpGBekZFZxOKOHjdzvxYH8Ptu9MA+DQ0QIee/Ig9nYytFo9pWVavv6gqzGPsUQiITGphMWr4mo9s7DIsC1l38E8YhNrtrBETwgkJ0/DzisO21xOu5d/KROKk6OlMSsKgKO93GT28Hr9EgRBaK7MPij8t+pKHSOWjgXh2pQKC3RX/Vms1emRNsEBOQmG2bn6yGUS/H2tOB5bVG8dQzuSOtu5vKR8VzsHHO3l7Dto2BeZeLaEvj1dKSisolxd98EYtVpL+hXXytVaSkqqjYPaK13MqiA3X0On9o6cOWfY2yiTSWgf7sA7W881uF+CIDRPYjK/mQ8Ko6KiSEtL49dffzV3VwThP+WvQ3mMf9SfrBwNyalltAq04bFhPnz/U03uzCnjW+DqbMnSNTVp6YJbGE7/qpQWONjLCW5hTXW1nvNphjh9Yx/xJT6plIsZamRyCV07ODOojztvvH3G2Ma0iYH8dTCPrBwNjvaGPYXWVhb88Ivh2UqFlPGP+vPXwVxy8yuxt5Pz0P1euLoo+O2vmj2P9/d1J+VCOQVFVYS3tmPmE8Hs+PoCaelqAPb8kc3o4b6sfCGcTR+eJydPg7urgt5dXfjoizRy8kz3BjbEZ9+kM26EHxculpN2Uc34R/3QaLTsuWJ5+Xr9EgShedLrb4+wMU2pWQ8Kvby8kEpvj4CPgnA7WfNuEk+MCeCZ6JY42svJza/km90ZvP9JTXw+ZydL3F1NTwVvebOj8f+3bmnLgHvcyciqYMRkw5YNldKCZ6KDcXNWoKnUkXKhnCWr4vl1X81gztVZwaJn22BvJ6ewuIrTCcVMefYoWTmGA2M6nR5/HxX39Q3D3k5OcXEVcWdKmDbvmEmQaD8fK6ZEBWJnIyMzu4IPdqSa7EnUaHRMm3eM6AmBLFsQipVKRm6ehsPHC+oNqXM9H36ehsJSypzoltjayIlNLGb2SydQXzHbeL1+CYIgNFdmDV7dVETwakEQBEG4/ZgzePUHTTh0GG++j9UoZp+Gi4uL4/333yc+Ph6A+Ph4oqOjmThxolg2FgRBEARBuEXMuny8e/duhg4dio2NDeXl5Xz55ZeMHz+eiIgI9Ho9AwcO5Mcff6RPnz7m7KYgCIIgCP9x4qCJmQeFS5YsYe7cuSxdupRPPvmE0aNHEx0dzbJlywBYuHAhK1euFINCQWgCLk6WRE8IpEsHJxQKKWnpala+mUDC2dI66y+YFcL9fT1qlSenljFumiGsS6+uLowf4Ye3pwqZTMKFi2o++SqNH3+rOYjx2aa78awjg8kX36Wz+p0k4/uJo/wZMtATWxsZsYklrH7njMmewvXLI4hs62DSxs97s1n0eu0QNDfT9frl5CDnqYlBdGrviJXKgtT0crbtSOX3v3ObtF+CIAj/lln3FNrb23P48GGCg4PR6XQoFAr++ecf7rrrLgBOnTpFv379yMzMvE5LpsSeQkG4NltrGZvXdeDIyUK++v4iBUWVeHuoyMiuqDeenrWVBQrLmh0nFhYStrzZkc+/TWfzx4YDKpHh9tjayEi5oKaqWkf3Ts5MmxTEc4tPGtPDOdjJufL8WKC/NWuXRjB9/jFjgOsxD/sy/lE/lq1NIC29nKjH/GkfZs+o6EPGQx3rl0eQll7Opg/PG9vSVOpu+BAJGAa+mVkVxs9ztYb0a82SdlhbW7DmnSSKiqvo39uNiaMDmDzniDGUjSAIdTPnnsL3f2u6th+/t+navpnMvqfwMqlUilKpxMHBwVhma2tLUdG1Y5cJgtB4Yx7xJTtXw4p1CcSdKSEzW8PhE4XXDLBcVq4lv7DK+Grd0hZbGxnf/VzzR9vRU0XsPZBHyoVyLmZW8NmudM6eLzXJ+1tYXGXSTrdOzly4WJPxBGDEEG8+2JHK3v25JKeWs2xNPAqFBQN6u5n0qUKjM2nr6gGhi5Mli59rww8fd+O7D7uxYmEYHm6mcU0boyH9Cmttx+ffphN3poSLWRVs3ZFKaVk1rYJsbvi5giAIt4JZB4UBAQEkJdUsF+3fvx8/Pz/j+7S0NDw9Pc3RNUH4T+ve2Zn4pBJeeT6UXdu6snntXQweUHtp+Foe7O9JzPECYyiZunRo54CftxXHTtf9x51MJmHAve4mA0svdyUuTgrjzCJAVbWeY6cKCW9tZ3J//3vc+PbDbmx7qyPTJgaiUlkYrykUUtYvj0Ct1jJt3nGeev4Y6gotqxa3QyZrfDyyhvbrZGwRfXq6YWsjQyIxpBSUy6UcPVnY6GcKgnDr6PVN97pdmHVPYXR0NFptzV/24eHhJtd/+OEHsZ9QEJqAl4eKYfep+PSrC3zwWSqhrWyZ9WQwVVV6dv92/TR3zo6W3N3BiSVv1N6/Z21lwZdbumIpl6DVweq3zxBzrKCOVqBXFxdsrGV8/0vNoNDJ0ZCR6MrUcQAFhZW4u9XsRdzzexYZWRXkFVQS6G/NlKgWBAfYMPulEwD06+mGTg8r1yca71m+LoHdn3Qnsq0Dh47W3af6NLRfL70Wy5LnQvnh4+5UV+uo0OhYsPy0SHMnCM2cOGhi5kHh1KlTr3n98oETQRBuLqkE4pNK2LAtGYAz50oJ8LNi2P1eDRoU3tfXndKyavYeqH14olyt5fGZMaiUFnSMcOTpSUFczDRdHr7sgf4e/HM4n7z8OrKLXP0DLZGYlO3aUzOQTE4t58JFNe+t7UCrIBsSz5YSEmyDt6eKPTt6mDRjKZfi7aHkENC/txtzp7W64poEvR5GPuRrLHv9rUR+uiJjyfX69cTYFtjayJi58DhFxVX07OLCK8+HMm3eMc6llNX+nIIgCM1Es85oIghC08grqDSmprssJa2ce7q5Nuj+B/p78ONvWVRX1/7TWq/HmDs4KbkMf18rxo7w4+ipkyb13F0VdIxwZOGK0ybl+QWGAaKToyV5BTWDRUd7ea1ZuislnC2lqkqHj6eKxLOlSCQSEpNKWLyq9mxmYVEVAPsO5hGbGGMsj54QSE6ehp270mv6U1jV4H55eSh5ZLA346YdMp5ITjpfRkSYPcMf8OKN/9Wk+xMEoXm5nZZ5m0qzOWgiCMKtczKuCD9vK5MyX28rMrOvv8QZGW6Pr5cV3+7JaNCzJBhm5672QD8PCooq2X8oz6T8YlYFufkaOrV3NJbJZBLahztwKr643ue08LNCLpcaB2yJZ0vw8VJRUFhFekaFyevygRS1WmtSXq7WUlJSbVJ2+VRxQ/qlVBj2NOp0pn3T6vRIRVpVQRCaOTEoFIQ70KdfpxMWYsu4EX54eyrp39uNIQM9+eK7i8Y6U8a34IXZIbXufWCAJ6fji01i81029hFfOrZ3xMtdiZ+PiseG+jCojzs//m66JC2RwP39PNj9axZaXa1m+OybdMaN8KNXF2da+FmxcFYIGo2WPZeWcb08lEwY6U9IsA0ebgq6dHDilXmhJJwt4WScYZl6zx/ZFBVXsfKFcNqF2uPprqR9uD0znwjC1dnyhr636/Ur5UI5aRfLmTutJW1a2uLloWTkMB86tXdk74G867QuCII56XRN97pdiOVjQbgDxZ8pYcHy00wZ34IJI/3JyFLz5sYkk71zzk6WuLuaBpm2trLgnm4urNuQdHWTAKiUFjwTHYybswJNpY6UC+UsWRXPr/tyTOp1bO+Ih5uS736qOwbph5+nobCUMie6JbY2cmITi5n90gnjrF11tZ4OEQ6MGOyNSmVBdo6G/TF5bP44xfgDrNHomDbvGNETAlm2IBQrlYzcPA2HjxfccCzD6/VLq9Uzd9Eppk5owasvhqNSWZCeoWbZ2ngOHM6/oWcKgiDcKmYNXn0tcXFxPPDAA5w7d67R94rg1YIgCIJw+zFn8Op3fmy6tqcObLq2b6Zmu3xcWVlJSkrdWQUEQRAEQRCEm8tsy8dz5sy55vWcnJxrXhcE4d+JCLNn9HBfQoJscHFWMH/ZKf68xr63yHB71q9oX6t8dPRBUi+oAUPqu3Ej/LivjzsuzgrS0st5e8s5/jlSExOwIc+tb7bgrc1n+fjLCwAMGehJ/95utAqywdpKxqCR+ygtu/EUdw3Rq6sLQwd5EhJsi4OdnAkzYkhKNg0zI5dJmDYxiH693VBYSjl8vIBVb58hJ6/+k9OCIJhf81w3vbXMNihct24d7du3x87Ors7rpaUiR6ggNCWV0oKk5FK++zmT5QvCGnzfqCkHKSuvNr4vLK4y/v8nxwYw4F53Xl2fSOqFcjrf5cjyBWFMfe6YMe9vQ547ZNzfJu+7dHBi3owQ/vi7Ji6iQiHlnyP5/HMkn6lRgQ3u/7VcL/exSinlZFwxv/2Vw7zptQ/hAMx4IpjunZ1Z9FosRSXVPD0xkNdeasuk2Ydvqw3ngnCnEcGrzTgobNmyJbNnz2bs2LF1Xj927BgdOnS4xb0ShDvHgcP5N3T4oaCost4ZuYH3uvPBjlRju1/9kEHnu5wYOcyHV1bHN/i5l2MDXtajiwtHThZyMasmZM5n3xhiCUaG21MfFydLpk8OonOkIzodnIgtYt3GJDKz60/Ndy0//mY4iFNf/mRrKwse7O/BK6vjiTleCMCS1fF8sbkLHSMcTVLkCYIgNDdm21PYoUMHDh8+XO91iURCMz0DIwh3tM3rOvDV1i6sXdqOyLYOJtfkcimaKtPpsEqNjnah9Q/crsfRQU63jk71nlSuz83OfdwQIcG2yOVSkxR6efmVJKeWEd6m7lURQRCaB71e32Sv24XZZgpXrVqFRlP/X+sRERHoxFqLIDQbuQWVvLo+gYSzpchlUgb1cWPd0nZMX3Cc46cNsQEPHs1n5DAfjp8qIj1TTYcIR3p0cUb6LyI339fHg3K1lj/+btw+45ud+7ghnB0tqazSUVJWbVKeX1iJs+ONxUYUBEG4Vcw2KPTw8Lgp7Wg0mlqDS522EqmF+AEWhJspLV1NWrra+P50QjFuLkpGPeRjHBSu23CW56a34sO3O6EHLmao+f7nTO7vd+P/3h/o78Ge37OprGrcX9tNlvv4BkiQiE3sgtDMiX+j/4Hg1StWrGDx4sUmZb4to/ALedxMPRKEO8fphGIG3ONmfF9YXMWCZaexlEuws5WTm19JdFQLMrKunz6vLu1C7fH3seLlV2Mbfe/Nzn3cEHkFlVjKpdhay0xmCx0d5JyML2r0ZxAEQbiVmm2cwqioKPr06XPdevPnz6eoqMjk5RM85hb0UBCEloE25OXXDrVSWaUnN78SCwsJvbu5XjPUzbU8OMCD+DMlJJ0vu37lq9zs3McNkZBUQlWVjk6RNfmRnR0taeFnzam4+vM2C4JgfiLNXTOeKfT29kYqvf6YVaFQoFCYngQUS8eCcH0qpRRvT5Xxvae7kuAW1pSUVpOVo2HK+Ba4OluydE0CACOGeJOZXUFySjlyuYQB97hzb3dXFiw/bWwjtJUtLs4Kks6V4uKsYOJof6RS+OiL1AY/9zIrlQX3dnfl/947W2f/nRzkODla4u1laCvQ34ZytaGNktJq9vyRzejhvqx8IZxNH54nJ0+Du6uC3l1d+OiLtBuKG2hrI8PdVYGLk+E3x8/bCoD8gkryC6soK9fy7U+ZTJsYSFFxFcWl1UybGMi5lDJijouTx4IgNG/NblCo1+uRSCQsX77c3F0RhP+01sG2JsGoZ0wOBuD7XzJZvjahVu5juUzKtMeDcHW2RFOpIzm1nGcXnTQJL2NpKeWJsQF4eahQV2g5EJPHK6vjTULYXO+5l/Xr5YZEAj/vrXs/37D7vJg4OsD4/n+vGtpctjaeH37JapLcxz3udmbhrNbG90ueDwVg80fnjbEN129KQqsNYsnzoSgUUg4fL+T5taduq9kCQbgTiT2FzTD3saWlJcePH6dNmzY33IbIfSwIgiAItx9z5j5e/XXTDYfmDG2aMFg3W7NLc6fValm5ciXOzs4ArF69+lZ2SxAEQRAE4Y5ktkHh2rVriYiIwMHBwaRcr9cTFxeHtbU1EsntMbIWBEEQBOH21rzWTc3DbIPCZcuWsXHjRlatWmVyylgul7NlyxZCQ0PN1TVBuOOMfcSXqVGB7Pj6Am9uqvtgR6+uLjx0nxfBgdZYyqUkp5az+aPztVK3jRjizUP3eeHuqqCwuIrf/87l3a3nTOIMujhZEj0hkC4dnFAopKSlq1n5piEw9mX+PlZET2hB+3AHpBJITi3npddiycrRYGsjY9LoADpHOuLmqqCouIq9B3LZtP38De8XbKiJo/wZMtATWxsZsYklrH7nDMmp5SZ1wkLseHJcAKEhdlRX60lKLuWZRSeprBQbCwVBaL7MNiicP38+/fr1Y+zYsQwePJgVK1Ygl8vN1R1BuGO1bmnLkEGeJCWXXrNe+zB7Dh0r4N1tyZSWVnN/Pw9efTGcJ589yplzhnv793ZjalQgK99M4GRcEb7eViycGQLA+kuDTVtrGW+/FsmRk4U8u+gkBUWVeHuoTOL6eXko+d+r7fn2p0ze+yiFsrJq/H2t0FwaVLk4WeLibMlbm8+RnFaGh5uSuU+1xMVJwYsrGx/T8LIFs0LIzKowHhq52piHfXlsmA/L1iaQll5O1GP+rFnSjlHRh4yha8JC7Fi1uC3bd6aydkMSVVV6gltYo9eJaQhBaM6a9t/o7bHyadbTx506deLw4cNMmzaNjh07sn37drFkLAi3kEop5eVnWvPa+kSiHvO/Zt2rZxA3bEumZxdnund2Ng4Kw1vbcTKuyJgBJDNbw897s2nTqibv75hHfMnO1bBiXc1J48xs06xET45rwf7D+by95Zyx7OIVAbCTU8t5YUXN4O9iZgUbtiXz4jNtsJCC9tKEnIuTJdMnB9E50hGdDk7EFrFuY1Kt5zXUiCHefLAjlb37cwFYtiaeb7Z1Y0BvN77enQHAjMlB7NyVzvadacb7LmSo62xPEAShOTF78GobGxu2bt3K/Pnz6d+/P1pt0y79CIJQY87Ulvwdk0/M8cJG3yuRGGIJFpfUZPw4EVtESJAtbVraAuDlrqRLRyf2x9QEr+7e2Zn4pBJeeT6UXdu6snntXQwe4GHSbreOTqSll7NqcVt2bevKhjci6dnF+Zr9sbaWUVZebRwQKhRS1i+PQK3WMm3ecZ56/hjqCi2rFrdDJmv8H59e7kpcnBQmy+VV1XqOnSokvLVh0OtgLyestR0FRZW8/Vp7vvmgK+tXRNAu1K6+ZgVBaCZ0+qZ73S7MPii8bOTIkcTExPDFF1/g73/tGQtBEP69vj1daRVkw7tbz12/ch1GDvNBqbDg1305xrJf/sxh04fJ/O/V9vz+ZU92bLqboycLTWbNvDxUDLvPi7SLaua8fJKvd2cw68lgBt3rDoCjvRwrKxljH/HjnyP5zH7pBHsP5LJsfhjtw+3r7IudrYwJj/nzzaXZOoB+Pd3Q6WHl+kTOpZSRcqGc5esScHdVENnWodGf18nREBQ/v9A06HVBYaXxmreHIa7jxFEB7Poxg2cWnSTxbClrl0bgc0XAbkEQhOaoWQWv9vHxwcfHx9zdEIT/PDcXBTOfCGbOSydMDoA0VL9erkwcHcD8paeMeYQBIsPtGf+oP6veOUNsQgk+nkpmPhlMbn4lWz81ZDWRSiA+qYQN25IBOHOulAA/K4bd78Xu37KQSA2zePv+yWXH14YcxEnJZYS3tmPYIC+OnTLNIWylsuD1l9pyPq3cZC9gSLAN3p4q9uzoYVLfUi7F20PJIQx7IOdOa3XFNQl6PYx8yNdY9vpbicblcACu/rokEmPZ5e0vX+/O4Ptfsoyfr0M7Bx7o78G7HyQ35OsVBMEMxOnjZjYoFATh1ggJtsHJ0ZJNazsYy2QWEiLC7Bn+oDd9hu+tNwNHnx6uzJsRwosrY2stO08e24Iff8vi2z2ZAJxLKUOptOC5p1vxwY5U9HrIK6jkfJrpad2UtHLu6eYKQFFxFdXVOs6n1q7TNtR0plClsmDV4raoK7QsWHYKrbbmV10ikZCYVMLiVXG1PsPlgey+g3nEJsYYy6MnBJKTp2HnrnRjWX6hoW5+gWGG0MnRkryCmtlCR3u5cfbwcvn5NNNczSkXynF3NU3HKQhC86K7ndZ5m4gYFArCHSjmeCHjph0yKVswK4SUC2o+3Jla74CwXy9X5s8IYdEbceyPya91XamQ1jrBp9PpkXBpQk0PJ+OKjDmDL/P1tiIz23CQpLpaT9yZEnx9atfJyqk5bGKlsmD1knZUVel4fumpWjOeiWdL6NvTlYLCKsrVde9VVqu1pF9xrVytpaSkmvSMilp1L2ZVkJuvoVN7R+PBGplMQvtwB965tASfkVVBTp6m9ufzUnHgsMh9LAhC89Zs9hQKgnDrqNVaklPLTV4VFTqKi6uMMfemjG/BC7NDjPf06+XKC7Nb83+bz3E6vhgnBzlODnKsrSyMdf46mMew+73o29MVT3clHds7MnlMC/YdzDMOND/9Op2wEFvGjfDD21NJ/95uDBnoyRffXTS28/EXafTt4crgAR54eyoZ/oAX3To78+X3hjoqlQVrlrRDqZCy4s0ErFUWxv5IL/2q7fkjm6LiKla+EE67UHs83ZW0D7dn5hOG/M034rNv0hk3wo9eXZxp4WfFwlkhaDRa9lyxvPzRF2k8Mtibe7q54O2pZPKYAPx9rPj2p4xrtCwIgrnp9U33ul2ImUJBEOrk7GSJu6vS+H7oIC9kMinPRLfkmeiWxvLvf8lk+VpDeJmtn6ag18MTY1vg6mxJYXEVfx3MM+4fBIg/U8KC5aeZMr4FE0b6k5Gl5s2NSSb79vYeyOON/51h7AhfZj0ZTGq6mhdWnOZEbDEArYNsCLt04nfHxrtN+v3IpANkZmvQaHRMm3eM6AmBLFsQipVKRm6ehsPHC244wPWHn6ehsJQyJ7oltjZyYhOLmf3SCWOMQjAMHBWWUqZPDsLOVk5ScimzXzrBxczas4+CIAjNiUSvv53GsA3TY/Af5u6CIAiCIAiNtG9Xb7M9e9knTRcSb+FIi+tXagbMuny8adMmoqKieP/99wH49NNPadOmDYGBgbz88svm7JogCIIgCMIdxWzLx2vXruWFF15g4MCBLFy4kIsXL7JmzRpmz56NTqdj1apVeHt78+STT5qri4IgCIIg3CF0/72F00Yz26Dw3XffZcOGDYwePZqjR4/SuXNn3nnnHSZNmgQYYha+9dZbYlAoCLfA2Ed8mRoVyI6vL9RKZ3el9uH2TJ8URICfNXn5Gj78PM2Y3u2yEUO8eeg+L9xdFRQWV/H737m8u/Wc8XTwsPs8GXafF57uhv2KyanlbPkkhQOHa04zq5RSpkYF0rOLC/a2MjKyK9i5K52vfqh5lpeHkqcnBtE21A5LuZR/juSz5t0kCgqraEoTR/kzZKAntjYyYhNLWP3OGePhHA83BTvf61LnfS+uPM1vf+U2ad8EQRD+DbMNClNSUujRwxBUNjIyEgsLC7p0qfkx7dmzJ3PmzDFX9wThjtG6pS1DBnmSlFx6zXqe7kpef7ktu37MYMmqeNqG2vHM1JYUFlfxx9+GwU7/3m5MjQpk5ZsJnIwrwtfbioUzDSeY118abObkVvLO1mTSL+UDvq+vOysWhjFx1mHj4Gr65GDuauvAK6viyMiuoHOkE3OiW5KbX8m+f/JQKqSsWdKOpORSZi48AcDksQG8+mI4U549esOn/RbMCiEzq8IkCPaVxjzsy2PDfFi2NoG09HKiHvNnzZJ2jIo+hFqtJTtXw5Bxf5vcM2SQF6OH+5oMegVBaH709YTiupOYbU+hlZUVZWU1AV5dXV2xsbExqVNdXX2ruyUIdxSVUsrLz7TmtfWJlJRe+9/bsEGeZOVU8Oams6RcKOfbPZl893Mmo67I/hHe2o6TcUX89Ec2mdkaDh0t4Oe92bQOtjXW+etQHgcO55N2UU3aRTUbtp1HXaElNMTOpJ0ffs3k6KkiMrM1fPNjBmeTS43ttA21x8NNybK1CZxLKeNcShkr1iYQ2sqODu0cjO24OFmy+Lk2/PBxN777sBsrFobh4XbjQaRHDPHmgx2p7N2fS3JqOcvWxKNQWDCgtxsAOp0h2PWVr15dnPn1z2zUFeK/OILQnOn1+iZ73S7MNihs3bo1J06cML5PS0szyXkcHx9PQECAGXomCHeOOVNb8ndMfq3MJHUJa23HoaOmAZgPHsmndbANFhaG9G4nYosICbKlTUvD4M3LXUmXjk7sj8mrs02p1JCDWam04HR8sbH8RGwRPe52xsXJEE8wsq0Dvl4qDh41zLZZyqTogaqqmoGWpkqHVqun3aWsJwqFlPXLI1CrtUybd5ynnj+GukLLqsXtkMkkDfuCruDlrsTFScHBK76Dqmo9x04VEt7ars57QoJsaBVky7c/ZTb6eYIgCLea2ZaPX331Vaytreu9npqaypQpU67bjkajQaPRmJTptJVILW4sOK0g3Cn69nSlVZANT8w50qD6zo6W/HPVfr38wipkMikOdnLyCir55c8cHOzl/O/V9kgkIJNJ+fL7dLbvTDO5L9Dfmndej8TSUoparWXBstMmqe/Wbkji+adb8dXWrlRX69Dp4dX1CcY4hacTiqmo0BI9IZB3tyUjwZCizsJCgvOlgWS/nm7o9LByfaKx3eXrEtj9SXci2zrUGuBej5Oj5aXPXGlSXlBYibubsq5beHCAB8mpZZy6YsArCELzVF8mpzuJ2QaF3bt3v+b1p556qkHtrFixgsWLF5uU+baMwi/k8RvumyD817m5KJj5RDBzXjpRKz3ctVy9DCKRmJZHhtsz/lF/Vr1zhtiEEnw8lcx8Mpjc/Eq2fppqvC81vZzHZ8ZgYy3jnm6uLJwdwvT5x40DwxGDvQkLseP5JafIzKkgIsyeZ6a2JC+/kpjjhRQWV/Hiq7E8G92SRwZ7o9PDz3uzSUgqMeYvDQm2wdtTxZ4dPUz6bCmX4u2h5BCGPZBzp7W64poEvR5GXrEk/vpbiSaBtbn665JIapcBlpZS+vVyZ+unde9PFARBaG5u+4wm8+fPr3UgZdDIf8zUG0G4PYQE2+DkaMmmtR2MZTILCRFh9gx/0Js+w/fW+qs5r6ASZ0fTGXhHeznV1TqKSgz7ESePbcGPv2Xx7R7Dcum5lDKUSguee7oVH+xINR4Aqa7WG/MLJySV0qalLSOGePP6W2ewtJTy5LgWLFh+2phf+ez5MloG2jDqIV/jUvehowU89uRB7O1kaLV6Ssu0fP1BV2PmEIlEQmJSCYtXxdX6/IVFhhnPfQfziE2MMZZHTwgkJ0/Dzl3pxrL8S7Oj+QWGGUInR0vyCmpmCx3t5bVmDwHu7e6CUiFl969Zta4JgtD83E57/5pKsx0URkVFkZaWxq+//nrNegqFAoXCdOO4WDoWhGuLOV7IuGmHTMoWzAoh5YKaD3em1rmMcjq+mG6dnU3KOkU6EZ9UilZr+DFVKqTodaY/rDqdHgmXJtTq+82VgFxu2OIss5Agl0tr1dXp9Ejq2AVdVGwYkN7VzgFHezn7Dhr2LyaeLaFvT1cKCqsoV9edqUCt1pJ+xbVytZaSkmrjgPVKF7MqyM3X0Km9I2fOGU5qy2QS2oc78M7Wc7XqP9jfk30H8ygsbtoQOYIgCDdLsx0Uent7I5WaNeGKIPxnqdVaY/iXyyoqdBQXVxnLp4w35C9eusaQ1/ir3RkMf9CbpycFsevHDMJb2/Fgfw8WvVEzE/fXwTweG+ZD4rlSYhNL8PZUMXlMC/YdzDMONJ8c14IDh/PJzq3ASiWjXy9XIsMdeGbRScAwMDt6spCnHg9Eo9GSmaOhfbg9g+51Z/17NTEU7+/rTsqFcgqKqghvbcfMJ4LZ8fUF0tINoW72/JHN6OG+rHwhnE0fnicnT4O7q4LeXV346Is0cvJqz+5dz2ffpDNuhB8XLpaTdlHN+Ef90Gi07LlyeRnw9lQSEWbP3MUnG/0MQRDMQycmCpvfoFCv1yORSFi+fLm5uyIIdzRnJ0vcXWsOUGRkVTB38UmmTw5i+ANe5OZrWLshyRijEGDrpyno9fDEWMOAsrC4ir8O5rFhW7KxjpODnBfntMbZyZKysmrOni/jmUUniTlWc/Dj5ddimRIVyEvPtsHORkZmjoYN286bBK/287FiSlSg4Xp2BR/sSOXTry8Yr2s0OqbNO0b0hECWLQjFSiUjN0/D4eMFlJXfWI7TDz9PQ2EpZU50S2xt5MQmFjP7pROor5qJfKCfJzl5GpOTyoIgCM2dRN/MFtEtLS05fvw4bdq0ueE2egz+4yb2SBAEQRCEW2Hfrt5me/bCzZrrV7pByybeeHzUW8lsM4X1ZSvRarWsXLkSZ2fD3qXVq1ffym4JgiAIgnAHal5TZOZhtkHh2rVriYiIwMHBwaRcr9cTFxeHtbU1EknjA8wKgiAIgiAIjWe2QeGyZcvYuHEjq1atok+fPsZyuVzOli1bCA0NNVfXBOGOM/YRX6ZGBbLj6wu8uelsvfXah9szfVIQAX7W5OVr+PDzNL7enWFSp3c3FyaPCcDbU0V6hpqN25LZe6Amo8nEUf5MHB1gck9eQSVDx+83vq9vCemtzWf5+EvDvsH1yyOIbOtgcv3nvdkser12CJqbaeIof4YM9MTWRkZsYgmr3zljPJzj4aZg53td6rzvxZWn+e2v3DqvCYJgfjpx0sR8g8L58+fTr18/xo4dy+DBg1mxYgVyudxc3RGEO1brlrYMGeRJUnLpNet5uit5/eW27PoxgyWr4mkbasczU1tSWFxlPGwSFmLH4udC2bQ9mb0HcunVxYUlz4fy1PPHiE0sMbZ1LqWMWS8cN76/OgTOkHF/m7zv0sGJeTNCTA61AHyz+yKbPjxvfK+p/HcpCRbMCiEzq4LNH9cdcHrMw748NsyHZWsTSEsvJ+oxf9Ysaceo6EOo1VqyczW1+j5kkBejh/ty4HD+v+qbIAhCUzNrzJdOnTpx+PBhcnJy6NixIydPnhRLxoJwC6mUUl5+pjWvrU+kpLT6mnWHDfIkK6eCNzedJeVCOd/uyeS7nzMZdUX2j0eHehNzrIDtO9NIvaBm+840Dh8v5NEhPiZtabV68gurjK+rY/ldeS2/sIoeXVw4crKQi1mm8QMrNDqTelefKnZxsmTxc2344eNufPdhN1YsDMPD7cY3fI8Y4s0HO1LZuz+X5NRylq2JR6GwYEBvN8AwuL267726OPPrn9moK0QOLUFozvR6fZO9bhdmDwRoY2PD1q1bmT9/Pv3790ervbFQEYIgNN6cqS35OybfmCXkWsJa29XKF3zwSD6tg22wsDD8MRfe2o6DR01nxP45mk94GzuTMh8vFV9t6cKOTZ1ZNLcNXu515w4GcHSQ062jE9/9lFnrWv973Pj2w25se6sj0yYGolJZGK8pFFLWL49ArdYybd5xnnr+GOoKLasWt0Mma/wfn17uSlycFCZhZqqq9Rw7VUh4a7s67wkJsqFVkC3f1tF3QRCE5qbZxCkcOXIkPXr04PDhw/j7+5u7O4Lwn9e3pyutgmx4Ys6RBtV3drTkn8LaM3oymRQHOzl5BZU4OVhScFWdgsIqnK5IjxebWMLSNfGkpatxcpAT9Zg/b78eybhphyguqT1beV8fD8rVWv74O8ekfM/vWWRkVZBXUEmgvzVToloQHGDD7JdOANCvpxs6Paxcn2i8Z/m6BHZ/0p3Itg61BrjXc/kzXJ3SrqCwEne3uge1Dw7wIDm1jFPxxY16liAIt55eTOY3n0EhgI+PDz4+PtevKAjCv+LmomDmE8HMeekElVUNX9q4ehnk8m6PK8vrWiq5sujKvXXnUuBUfDGfbryb+/p4mASfvuyB/h7s+T27Vj937amZfUtOLefCRTXvre1AqyAbEs+WEhJsg7enij07epjcZymX4u2h5BDQv7cbc6e1uuKaBL0eRl6xJP76W4n8dGXGkqs/nkRSuwywtJTSr5c7Wz+te3+iIAjCtfzvf//j9ddfJyMjg7CwMNauXUvPnj3rrPv7779z77331iqPi4ujdevWDX5msxoUCoJwa4QE2+DkaMmmtR2MZTILCRFh9gx/0Js+w/fWOvyRV1CJs6NpXnFHeznV1TqKLs3w5RdWmswKgmH5t6Cw/pRyFRod586X4eOlqnWtXag9/j5WvPxq7HU/U8LZUqqqdPh4qkg8W4pEIiExqYTFq2qfRi4sMsxm7juYR2xijLE8ekIgOXkadu5KN5blX5r5zC8wfAYnR0vyCmo+j6O9vNbsIcC93V1QKqTs/jXrun0XBMH8dM1o79+nn37KrFmz+N///kf37t159913ue+++4iNjcXPz6/e+xISErCzq9nO4urq2qjnikGhINyBYo4XMm7aIZOyBbNCSLmg5sOdqbUGhACn44vp1tnZpKxTpBPxSaVotYYf01PxxXRq78iOr2sGVZ0jnTgVV//yqVwmwd/XiuOxRbWuPTjAg/gzJSSdL7vuZ2rhZ4VcLjUO2BLPltC3pysFhVWUq+veq6xWa0m/4lq5WktJSTXpGRW16l7MqiA3X0On9o6cOWc4qS2TSWgf7sA7W8/V7nt/T/YdzKt1iEYQBOF6Vq9ezaRJk5g8eTJgiO38448/8vbbb7NixYp673Nzc6sV/7kxzH7QRBCEW0+t1pKcWm7yqqjQUVxcZYy5N2V8C16YHWK856vdGXi4KXl6UhD+PlY80M+DB/t78PGXacY6n32TTqdIJ8Y87Iufj4oxD/vSMcKBHd/ULAtPmxhI+3B7PN2VhLayZen8MKytLPjhF9PDGFYqC+7t7squPaZxEAG8PJRMGOlPSLANHm4KunRw4pV5oSScLeFknGFwueePbIqKq1j5QjjtQg3Pax9uz8wngnB1tqzVZkN89k0640b40auLMy38rFg4KwSNRsueK5eXAW9PJRFh9nxbR98FQWiemvL0sUajobi42OSl0dSdVq+yspLDhw8zYMAAk/IBAwbw999/13nPZZGRkXh6etK3b19+++23Rn8HYqZQEIQ6OTtZ4u5ac4AiI6uCuYtPMn1yEMMf8CI3X8PaDUkmsQNPxRez6LVYnhjXgsljAkjPVPPSa3EmMQpdnRUserYN9nZyCourOJ1QzJRnj5KVY/oD2a+XGxKJISD11aqr9XSIcGDEYG9UKguyczTsj8lj88cpxllOjUbHtHnHiJ4QyLIFoVipZOTmaTh8vKBW6JqG+vDzNBSWUuZEt8TWRk5sYjGzXzqB+qqZyAf6eZKTpzE5qSwIQvPWlMGrV6xYweLFi03KXn75ZRYtWlSrbm5uLlqtFnd3d5Nyd3d3MjPrjmTg6enJhg0b6NChAxqNhm3bttG3b19+//13evXq1eB+SvS3UwCdBuox+A9zd0EQBEEQhEaqL5vRrTD7/64dwP/fWPmEvNbMoEKhQKGoHTf14sWLeHt78/fff9O1a1dj+bJly9i2bRvx8fENeubgwYORSCR88803De6n2ZaPExMTTU4p7tu3j2HDhhEWFka/fv34+uuvzdU1QRAEQRDuMHp9070UCgV2dnYmr7oGhAAuLi5YWFjUmhXMzs6uNXt4LV26dOHMmTON+g7MNihs06YNOTmGuGO///47vXv3RqfTMWbMGBwcHBg+fDg//vijubonCIIgCIJwy1laWtKhQwd++uknk/KffvqJbt26Nbido0eP4unp2ahnm21P4ZWzhEuXLmXq1Km89dZbxrL58+ezfPlyBg4caI7uCcIdZ+wjvvTu5oK/txWaSh0n44t5e8s50tLV9d7TLtSOqVGB+PtYoVRIyczR8PXuiyanj8GQHu6h+7xwd1VQWFzF73/n8u7WcyaxB12cLImeEEiXDk4oFFLS0tWsfDOBhLOGJZ36lpXe2nyWj7+sHd/wZnnofi9GDffB2VHB+dQy1m08y4krTko7OsiJnhBI5/aO2NjIOH6qiDXvJnEho/7vTRCE5kffhHsKG2vOnDmMGzeOjh070rVrVzZs2EBqaipTp04FDGOk9PR0PvjgA8BwOjkgIICwsDAqKyvZvn07n3/+OZ9//nmjntssDprExsaybNkyk7Jx48axceNGM/VIEO48keEOfPHdReLPlGAhlfDE+BasWdKOsU8dokJTd6h/dYWOL75L5+z5MtQVWtqF2jN3WisqKnR886Ph5G3/3m5MjQpk5ZsJnIwrwtfbioUzDaea1286C4CttYy3X4vkyMlCnl10koKiSrw9VJSU1WQ4GTLO9NRdlw5OzJsRYnLQpbEmjvLHw13J8rUJdV7v08OVGZODWPXOGU7GFjN0kCdvLGrLuGmHjAdjViwMp7pax7xlpykrr2bkMB/WLr329yYIgnAtjz32GHl5eSxZsoSMjAzCw8P5/vvvjRnfMjIySE1NNdavrKzk2WefJT09HZVKRVhYGN999x33339/o55r1kFhSUkJSqUSlUpVa23d0tIStVr8pS0It8ozi06avF+xNoFvP+xGSLAtx0/XjiEIcOZcqTFmH0Bmdja9u7rQLszeOCgMb23HybgiY1aQzGwNP+/Npk2rmgCrYx7xJTtXw4p1CVe0ZbopO/+q9Hk9urhw5GQhF7NqYgpaW1kw7fFAenZxwdJSSvyZEtZvOtugOId1GTnMh29/yuTbS9lT3tx0ls53OTLsPi/e/SAZXy8V4a3tGDftkDGUz6q3z7BrWzf69XYz3icIQvPXnIJXAzz11FM89dRTdV7bsmWLyfvnnnuO55577l8/06xxClu1aoWjoyPJyckcPnzY5Nrp06fx9vY2U88EQbC2tgCguKThwZdbBtoQ3saeY6cKjWUnYosICbKlTUtbALzclXTp6MT+mDxjne6dnYlPKuGV50PZta0rm9fexeABHvU+x9FBTreOTnz3k+mg6/WX2+LkaMmzi08yadYREs+VsnZZBLY2jf/7VyaT0CrYlkNH803KDx0tILyNYUArlxt+QjWVNTOCOh1UVetoF2rf6GcKgiCYk9lmCq8Oqnj1Zsjz58/zxBNPXLcdjUZT65i3TluJ1OLGgtMKgmAwfVIQx08XGWfAruWL97vgYC/HQiph88fnTWbIfvkzBwd7Of97tT0SCchkUr78Pp3tO2uCXnt5qBh2n4pPv7rAB5+lEtrKlllPBlNVpWf3b7XTxN3Xx4NytZY//s4xlt3VzoFAf2sGj/2bqmrDX/xvbT5Hz7tduLe7q3HmsqHs7eTILCS1ZijzC6twdjD8vqRcKCcjq4KpUS14/f/OoNZoGTnMBxcnRa2UgIIgNG/NaU+huZhtUNi797VjEc2cObNB7dQVENK3ZRR+IY/fcN8E4U43Z2owQQE2PPX80QbVnzbvGCqlBWEhtkyNCiQ9Q83Pew0Dtshwe8Y/6s+qd84Qm1CCj6eSmU8Gk5tfydZPDXtipBKITyphw7ZkwLAsHeBnxbD7veocFD7Q34M9v2ebHFQJCbJBpbTgu4+6m9RVWErx9jAE4W4Xas8bi9oar8llEiQSuKdbTX7QbZ+lsu2zmr06V68oSSRwuUir1fPCitPMmxHCD590p1qr5/CxApNZUEEQbg9iUNhMDpr8G/Pnz2fOnDkmZYNG/mOm3gjC7W/Wk8F07+zM0/OPk5NX2aB7Mi7t6zuXUoaTgyUTRwUYB4WTx7bgx9+yjLOH51LKUCoteO7pVnywIxW9HvIKKjmfZjojmZJWbjJYu6xdqD3+Pla8/GqsSblUKiGvoJLpC47Vuqf00oGV+KQSHp8ZYyx/ZLA3rs4K3t5Sk7u4uMRQt6i4imqtHmdHuUlbjvZy8gtrvpeEs6U8PvMw1lYWyGVSCour2PBGJPFJJQiCINxOmu2gMCoqirS0NH799ddr1qsrIrhYOhaEGzN7SjC9urowff5x40Cv0SQ1e+0AlApprb/AdTo9Ei7NuunhZFwRft5WJnV8va3IzK7dhwcHeBB/pqTW4ZGEs6U4OVqi1eprHVK5rLJSR3pGTZslJdVYW8lMyi6rrtaTmFRCp0hH9h6omfnr2N6Rff/Ungk0pM7T4uOpIiTYlo0fnq+zD4IgNE9iorAZDwq9vb2RSs16DkYQ7ijPRAfTr5c785edolxdjZODYYastFxL5aWDFFPGt8DV2ZKlawynhIff70VWjoaUC4ZZvnahdox6yJfPv62JU/jXwTweG+ZD4rlSYhNL8PZUMXlMC/YdzDPmKf7063Teea0940b48eu+bEJb2TFkoCev/V+iSR+tVBbc292V/3vvbK3+xxwr4HR8MSsWhvP2lnOkppfj4qSga0cn9h7IJSGp8SmsPvnqAi/OaU38mVJOxRczZJAn7q5KvvrhorHOvd1dKCyqIitHQ2CANTOfCObPf3I5JPIeC4Jwm2l2g0K9Xo9EImH58uXm7oog3FEeut9w2v//VrQ3KV+2Np4ffjHs63N2ssTdVWm8JpHClKgWeLor0Wr1pGeqeWfrOb7eXXOoY+unKej18MRYw4CysLiKvw7mGfcPAsSfKWHB8tNMGd+CCSP9ychS8+bGJGMYm8v69XJDIoGf95qWX/bs4pM8OS6A+TNDcLAzLPMeO1VEQWHDT1Bf6dd9OdjbyZkw0h9nJ0uSU8qYu/ikMUah4TtR8PSkIJwcLMkrqGT3r1ls+TTlhp4nCIL5iD2FINHrm1dgHktLS44fP06bNm1uuI0eg/+4iT0SBEEQBOFWqC9z0a0w9dWmm91/53nHJmv7ZjLbTOHVh0Mu02q1rFy5EmdnZwBWr159K7slCIIgCMIdqJnNkZmF2QaFa9euJSIiAgcHB5NyvV5PXFwc1tbWSCQS83ROEARBEAThDmO2QeGyZcvYuHEjq1atok+fPsZyuVzOli1bCA0NNVfXBOGOEBFmz+jhvoQE2eDirGD+slP8eeDa8fXkMgmPj/JnwD3uODlakpOr4YMdqXz3c02w6t7dXJg8JgBvTxXpGWo2bks2Ob17pbGP+DI1KpAdX1/gzU01h0dUSilTowzp6uxtZWRkV7BzVzpf/VB3AOo3FrWlSwenBn2Gf6NXVxeGDvIkJNgWBzs5E2bEkJRccwraw03Bzve61HnviytP89tfN56nWRCEpqUTewrNNyicP38+/fr1Y+zYsQwePJgVK1Ygl8uvf6MgCDeFSmlBUnIp3/2cyfIFYQ26Z8nzoTg5WLLyzQQuZKhxtLfEwqJmRj8sxI7Fz4WyaXsyew/k0quLC0ueD+Wp548Rm2gat691S1uGDPIkKbn2qeDpk4O5q60Dr6yKIyO7gs6RTsyJbklufmWtcDCPDvW+acs+C2aFkJlVweaP6z4oolJKORlXzG9/5TBvekit69m5GoaM+9ukbMggL0YP9+XA4fxa9QVBaD7E8rGZTx936tSJw4cPM23aNDp27Mj27dvFkrEg3CIHDuc3aqBy912OtA934NEn/qGk1BDg+ep4gI8O9SbmWIExhd32nWlEhjvw6BAfFr0RZ6ynUkp5+ZnWvLY+kajH/Gs9K7y1HT/8msnRU0UAfPNjBkMHedI62NZkUBgcYM1jQ314Ys4RvtnWrVY7Lk6WTJ8cROdIR3Q6Qx7mdRuT6o1jeD0//mY49ezhpqjzuk5HrbR4vbo48+uf2agrdHXeIwiC0FyYPRCgjY0NW7duZf78+fTv3x+tVmvuLgmCUIcedzuTkFTCmId9+XJLFz5+pxPTJgZiaVnzMxLe2o6DR00Hmv8czSe8jZ1J2ZypLfk7Jp+Y44V1PutEbBE97nbGxckQiD6yrQO+XiqTthUKKS/PbcOad5NqDcQuX1+/PAK1Wsu0ecd56vljqCu0rFrcDpns1vzxGRJkQ6sgW779KfP6lQVBMCu9Tt9kr9tFs4lTOHLkSHr06MHhw4fx9689cyAIgnl5uatoG2qPpkrHgmWnsbeT80x0S+xsZKx40xBk2snBslZMwILCKpwca7IM9e3pSqsgG56Yc6TeZ63dkMTzT7fiq61dqa7WodPDq+sTOBFbbKwzY3IQp+KL68wuAtCvpxs6PaxcXxMAe/m6BHZ/0p3Itg63JLj0gwM8SE4t41R88fUrC4IgmFmzGRQC+Pj44OPjY+5uCIJQB4kU0OtZ8kbcpZRusP69syydF8qqd5KMWU/q2pdzucjNRcHMJ4KZ89IJKqvq/+t5xGBvwkLseH7JKTJzKogIs+eZqS3Jy68k5ngh3Ts7c1c7BybOPFxvGyHBNnh7qtizo4dJuaVcireHkkNA/95uzJ3W6oprEvR6GPmQr7Hs9bcSawXRbghLSyn9ermzVQSyFoTbwu00o9dUmtWgUBCE5isvv5KcvErjgBAgJa0cqVSCm7OCCxlq8gsrTWYFARwd5BQUVgKGgZqToyWb1nYwXpdZSIgIs2f4g970Gb4XmUzKk+NasGD5afbHGJaLz54vo2WgDaMe8iXmeCEd2jng7aHih09MB3xL54VxIraI6QuOI5FISEwqYfGqOK5WWGSYzdx3MI/YxBhjefSEQHLyNOzcVZOmr66l6Ya4t7sLSoWU3b9m3dD9giAIt5oYFAqC0CAn44q5t4crKqXUeGjC11uFVqsnO89wcONUfDGd2juy4+uaQVXnSCdOxRmWT2OOFzJu2iGTdhfMCiHlgpoPd6ai0xkGiXK5lKsnHHU6vWG2Eti+M5Vde0zD02x7qxPr3zvLXwcNy8mJZ0vo29OVgsIqytV171VWq7WkX3GtXK2lpKSa9IyKRn47tT3Y35N9B/MoLL6xQaUgCLeWTpw+Nv9BE0EQzEOllBLcwprgFtYAeLorCW5hjbur4WTtlPEteGF2TdiVn/7Ioqi4igUzWxPga0VEmD3THg/ku58zjUvHn32TTqdIJ8Y87Iufj4oxD/vSMcKBHd9cAAyDsOTUcpNXRYWO4uIqklPLAcPA7OjJQp56PJDIcHs83ZXc19edQfe6s3e/Ic5ffmFVrXYAsnIqyMgyDOj2/JFNUXEVK18Ip12ooZ324fbMfCIIV2fT2cyGsrWREdzCmgBfw3fm521FcAtrnBxMw2l5eyqJCLPn2z11x1UUBEFojsRMoSDcoVoH27J+RXvj+xmTgwH4/pdMlq9NwNnJEndXpfG6ukLH7JdOMPvJlmxacxdFxVX8ti+HDdvPG+ucii9m0WuxPDGuBZPHBJCeqeal1+JqxSi8npdfi2VKVCAvPdsGOxsZmTkaNmw7X2/w6rpoNDqmzTtG9IRAli0IxUolIzdPw+HjBSZL4I3R425nFs5qbXy/5HlDkP3NH503iW34QD9PcvI0HLwFh1kEQbg5xJ5CkOjNFK2xbdu2PProo0yYMAFfX9/r39AIPQb/cVPbEwRBEASh6e3b1dtszx7/YtPN7H/wimeTtX0zmW35+PTp06xbt44WLVowaNAgPv/8c6qrq83VHUEQBEEQhDuaWZePT5w4wcGDB9m8eTMjR47E0dGR8ePHM2nSJNq0aWPOrgnCHW/iKH8mjg4wKcsrqGTo+P111o8MtzdZjr5sdPRBUi+oje8bkhvZxcmS6AmBdOnghEIhJS1dzco3E0g4Wzsl3s3Qws+KSWMCCAmyxdNdybqNSXz2TXqteg/d78Wo4T44Oyo4n1rGuo1nORFb1CR9EgTh1hK5j808KJTJZAwbNoxhw4aRmZnJ+++/z/vvv8+aNWu4++67mTx5MhMnTjRnFwXhjnYupYxZLxw3vtc1IFPbqCkHKSuvmfW/8vRtQ3Ij21rLePu1SI6cLOTZRScpKKrE20NFSdmNryTc19ed+/t6MH3B8TqvKxQWXMys4Ld9OUyfHFRnnT49XJkxOYhV75zhZGwxQwd58saitoybdoisnBtLmycIgtCcmG35+Oocxx4eHsyfP5/ExER++eUXgoKCmDFjhpl6JwgCgFarJ7+wyvhqSHiVgqJKk3uuHEhemRs59YKa7TvTOHy8kEeH1AStH/OIL9m5GlasSyDuTAmZ2RoOnyjkYmZNmBiZTEL0hEC+3NKFnz7rwYY3IokMt7/hzxl/poT/vX+OX/7MoaqeoNojh/nw7U+ZfLsnk5QL5by56SzZuRUMu8/rhp8rCELzIdLcmXGm8FrnW+655x7uueceiotFaihBMCcfLxVfbelCZbWO2IQSNnyQzMWsa8fw27yuA5ZyKefTytn6aSpHTxYar4W3tuPTry+Y1P/naL7JoLB7Z2cOHi3gledDaR9uT06ehi+/v8iuPTX5gxfMDMHDTcnLr8WRm6+hd1cX3ljcjqinY7iQoeZmk8kktAq2ZfvOVJPyQ0cLauV1FgRBuF2ZbVAYFRWFSqW6Zh07O/FjKwjmEptYwtI18aSlq3FykBP1mD9vvx7JuGmHKC6pvZSbW1DJq+sN+/7kMimD+rixbmk7pi84zvHThn13DcmN7OWhYth9Kj796gIffJZKaCtbZj0ZTFWVnt2/ZeHloaRfLzceevwAefmGTCkff3mBu+9y4v5+HmzYlnzTvwt7OzkyC0mt7Cb5hVU4O9xYzENBEJoXMwVjaVbMNih8//33b0o7Go0GjcZ0P49OW4nUQvxQC8K/ceBwvvH/n0sxxCD8dOPd3NfHo9ZsH0Baupq09JpZutMJxbi5KBn1kI9xUAjXzo0MIJVAfFKJcXB35lwpAX5WDLvfi92/ZRESZINUKuHjdzqbtGEpl1BUYhi0ubsq2PZWJ+M1CwsJMguJSR7kPb9n8cb/zjT066jVTwCJBMR/RgRB+K+47YNXr1ixgsWLF5uU+baMwi/kcTP1SBD+myo0Os6dL8PH69oz/Fc6nVDMgHvcjO+vlxsZDCecz6eVm9RJSSvnnm6ugGE/crVWz6TZh2udFlRfSlmXm6fh8Zk1OY17d3Xlnm4uJnmQGxPAuqi4imqtHmdH08wljvZy8q/ouyAIty99Q07S/cc12zR3UVFR9OnT57r15s+fT1FRkcnLJ3jMLeihINxZ5DIJ/r5W5BU0fBDUMtDGuMQLNbmRr3RlbmSAk3FF+HlbmdTx9bYiM9uwl/HMuVJkFhIc7S1Jz6gweV1e3tXqoOxnigAAIoZJREFUMCkvKKpEU6kzKSssanhO4upqPYlJJXSKNO17x/aOJn0XBOH2pdPpm+x1u2i2g0Jvb2/8/f2vW0+hUGBnZ2fyEkvHgvDvTZsYSPtLuYdDW9mydH4Y1lYW/PCL4cDH1bmRRwzxpmcXZ3w8VbTws2LK+Bbc292Vz7+7aKxzvdzIAJ9+nU5YiC3jRvjh7amkf283hgz05ItL7aRdVPPjb1m8MCeEXl1d8HRX0rqlLWMe9qVLB6cb+qwymcSYB1ouk+DqrCC4hTXenjVp/j756gIP9vfkgX4e+PtYMX1yEO6uSr764eI1WhYEQbh9NLvlY71ej0QiYfny5ebuiiDc0VydFSx6tg32dnIKi6s4nVDMlGePGmPyXZ0bWS6TMu3xIFydLdFU6khOLefZRSdN9iY2JDdy/JkSFiw/zZTxLZgw0p+MLDVvbkzipz+yjXWWr0sg6jE/np4UiKuTgqKSKk7HF7M/puZZjeHiZMmWNzsa348e7svo4b4cPVlojG34674c7O3kTBjpj7OTJckpZcxdfFLEKBSE/whx0MSMuY/rY2lpyfHjx/9VRhOR+1gQBEEQbj/mzH386DPnm6ztHasCmqztm8lsM4Vz5syps1yr1bJy5UqcnZ0BWL169a3sliAIgiAId6DbKch0UzHboHDt2rVERETg4OBgUq7X64mLi8Pa2rpW1hNBEARBEAShaZhtULhs2TI2btzIqlWrTE4Zy+VytmzZQmhoqLm6Jgj/eWMf8aV3Nxf8va3QVOo4GV/M21vOmcQZvFqvri48dJ8XwYHWWMqlJKeWs/mj8xw8WlBn/b49XVn8XCh7D+SyYNnpevsxNSqQHV9f4M1NZ43lC2aFcH9fD5O6p+OLmTL3qPH9+uURRLZ1MKnz895sFr0eR1Pp1dWFoYM8CQm2xcFOzoQZMSQll5nUMUe/BEH498RMoRkHhfPnz6dfv36MHTuWwYMHs2LFCuRy+fVvFAThX4sMd+CL7y4Sf6YEC6mEJ8a3YM2Sdox96hAVmrpjdbUPs+fQsQLe3ZZMaWk19/fz4NUXw3ny2aOcOVdqUtfdVcG0iUEcO1VYbx9at7RlyCBPkpJL67x+4HA+y9fGG99XVdf+wf5m90U2fXje+F5T+e/ijC2YFUJmVgWbP06p87pKKeVkXDG//ZXDvOkhddZpin4JgiDcCmY9fdypUycOHz7MtGnT6NixI9u3bxdLxoJwCzyz6KTJ+xVrE/j2w26EBNuaZB+50pUzeQAbtiXTs4sz3Ts7mwwKpVJ4+dk2vPfReSLC7LGxrv0zo1JKefmZ1ry2PpGox+oOPVVZpauVVu5qFZpr13FxsmT65CA6Rzqi08GJ2CLWbUwiM/vGTgz/+JvhBLSHm+Jf9UsQhOZHpxd/vJk9JI2NjQ1bt27lk08+oX///mi1Dc8yIAjCzWFtbQFAcUnDBzISCVipLGrdM2GkP4VFVXz3UyYRYfZ13jtnakv+jskn5nhhvYPCyHAHdm3rSmlZNUdPFbFhW3KtgNP973FjwL3uFBRWcuBwPps/TjFmNVEopKxfHsHx00VMm3ccrVZP1GN+rFrcjqjpMVTXMfN4s1yrX4IgNE9i+bgZDAovGzlyJD169ODw4cMNClotCMLNM31SEMdPF5GcWn79ypeMHOaDUmHBr/tyjGVt29jxYH9PkxRzV+vb05VWQTY8MedIvXUOxOTz274cMrMr8HJXMXlsAG8ui2DSrMPGZeQ9v2eRkVVBXkElgf7WTIlqQXCADbNfOgFAv55u6PSwcn2isd3l6xLY/Ul3Its6cKievZD/1vX6JQiC0Fw1m0EhgI+PDz4+PubuhiDcUeZMDSYowIannj96/cqX9OvlysTRAcxfeso4e6dSWfDiM6157f8SKSqurvM+NxcFM58IZs5LJ6isqv+v8isHmsmp5cQnlbDzvbvp2smZvftzAdi1J9OkzoWLat5b24FWQTYkni0lJNgGb08Ve3b0MGnbUi7F20PJIaB/bzfmTmt1xTUJej2MfMjXWPb6W4kmgbOv53r9EgSheRIzhc1sUCgIwq0168lgund25un5x8nJa1hO4z49XJk3I4QXV8YSc7zQWO7tocTLXcXKF8ONZdJLW4R//6oXo6ceJCjAGidHSzat7WCsI7OQEBFmz/AHvekzfC915aTPK6gkM6cCXy9Vvf1KOFtKVZUOH08ViWdLkUgkJCaVsHhV7VO/lwey+w7mEZtYM6sZPSGQnDwNO3elG8v+7d7Aq/slCILQXIlBoSDcoWZPCaZXVxemzz9ORlZFg+7p18uV+TNCWPRGXK2UcqkXyhk37ZBJ2RPjWmClsmDdhiSyczUUFFXVqrNgVggpF9R8uDO1zgEhgJ2tDDcXJXn59Q9cW/hZIZdLySsw1Ek8W0Lfnq4UFFZRXs9+PrVaS/oV18rVWkpKqknPaNj30RBX90sQhOapmSV4MwsxKBSEO9Az0cH06+XO/GWnKFdX4+RgCAdVWq6l8lL4lCnjW+DqbMnSNQmAYUD4wuzWrNt4ltPxxcZ7NJU6ysq1VFbpa+1JLC0zLCNfLq+u1taqU1Gho7i4yliuUkqZODqA3//KJa9Ag6ebkifHt6CouIo/DhiWjr08lAy4x539MXkUFVcR4GvN05MCSThbwsk4w+npPX9kM3q4LytfCGfTh+fJydPg7qqgd1cXPvoircEzo1eytZHh7qrAxclw+tjP2wqA/IJK8gurGtQvQRCE5koMCgXhDvTQ/d4A/N+K9ibly9bG88MvWQA4O1ni7qo0Xhs6yAuZTMoz0S15Jrqlsfz7XzJZvjbhpvVNq4NAf2sG3euOjbWMvIJKjpws5OXX4owneKur9XSIcGDEYG9UKguyczTsj8lj88cpxtlGjUbHtHnHiJ4QyLIFoVipZOTmaTh8vICy8hs7CdzjbmcWzmptfL/keUOQ/c0fnWfzxykN6pcgCM2TTvwjRaJvBvOlWq2W3NxcLCwscHFx+dft9Rj8x03olSAIgiAIt9K+Xb3N9uzBU5ou69Cud9s0Wds3k9ScD//uu+/o1asX1tbWeHl54e7ujoODA+PGjSM1NdWcXRMEQRAE4Q6i1+mb7HW7MNugcNu2bYwaNYoOHTowe/ZsXF1dee6551i5ciVpaWl06NCBM2fOmKt7giAIgiDcQfR6XZO9bhdmWz5u06YNixYt4rHHHgMgJiaGhx56iNTUVCQSCSNHjqSyspIvvvii0W2L5WNBuLaxj/jSu5sL/t5WaCp1nIwv5u0t50hLV9d7j7OjJU9PCiQkyBYfLxU7d6XXSn23fnkEkW0dat3796E8nltyCoCJo/yZODrA5HpeQSVDx+83vl8wK4T7+3qY1DkdX8yUuTWxFOdOa0nHiP9v787Dqi7z/48/D3A4rIogq6igGC6MS5Ilmpa5ZdpYM2m2KCqWaDRqzihOpvZ16ztZalNamum4NDn9+v1aJg1btMUlcUFTBE1AUxDFBRA4wOH8/iCPHsFcUg/o63FdXHLuz/35fG7OdXmu97nv+/N+16O+rytFJRZ+Ss1nwbKDHPrl0n/D9TBsUGMe7hWMt5cLe9MLeG3h/ioPz7SKrMMzT4fRMrIO5eVWDmQU8sLU3baHeESkeo5cPn4o7qcbdu3/Lo66fKcawGEPmmRlZXH33XfbXkdHR5OTk0N2djYhISGMGzeOXr16OWp4Ire0dlE+fPTfo+zbX4Czk4ERg8N5/eXWPDVqKyXm6gMXo9HA6TNl/Gv1IQb8sUG1fSbN3IPR5Xz98rp1jLw3P5pvfjhu1+9g1lnGvJhie13d/u7N204yc+4+2+uyi8rSpR0oJGl9LseOl1DH28iwQY15/eXWPBa35Zof6pg0JpKcYyUseT+r2uNP/qkhA/uHMmNuGoePFDFkYOU9B8VvtT0E0yqyDnOm/YEVHx5i7jsHKCuzEhHuWauWkERuR/o/6sCgMCwsjOTkZMLCwgDYvn07Tk5OBAYGAuDr60tZmQrKi9wIL0zdbfd61tw0PlsZQ2SENyl7qk+dkpNrZt6iypnBh3oEVdunoNC+kskDXQIwmy188719UGixWC+bFLq0rOI3+3zyRbbd2BatyGTZG9EEBbhxNKcyz2B9X1cS4prSoV09Kipg194zzFt0gJxc82/e+1Iee7gB/1p9yFZVZcbr+/hkeQw9uwbw8drK8Twf15QPPz3Cig8P2877JfvGzl6KiFwPDgsKR48eTVxcHFu3bsXNzY3Fixfz9NNP4+zsDMCWLVu44447LnMVEbkePD0r/9/lF1zfL2J9ewTx1be5VWYfQ0Pc+X9L76G0vIK9aQW8868Mjl6UQLtdlA+fLu9I4dlydvx0hneWZ9gqkVzMzeREn+5BHM0pJvdEZcBnMjnxxsw2pOw5w+iJKVgsVoYMbMScaa0ZkpBMefnVzQqEBLpR39fEjxfUTC4rt7Lzp9NENa/Dx2uz8alrpFXzOiRtOMaC/21LgyB3so4UsWh5Brv25l/V/UTk5tJMoYODQicnJ1asWIHZbCY2NpbJkyfbjnfo0IFVq1Zd9jpmsxmz2f5bf4WlFCdn1+s+ZpFbVcLwpqTsOVNlb9zv0aKZN03DvJg9P92ufW96AdNf38fhI8X4+hgZMrAxC/7RjqdHbyW/oHKmcXPySb75/jg5uSWEBLoT91QY82e0YfiYbXbLyI/0CSE+tgke7s5kHj7LmMm7bMFe93sDqLDC7DfO33/mvDTW/rsT7f7gw9YLgrsr4Vuv8jPl5Gn7pNenTpcSGFCZz7FBUOW/wwaF8eaSn9mfcZbe3QKZO70Ng0cna8ZQRGo0hyavjo+PJz4+vtpjzZo1q7b9YrNmzWLatGl2bQ2bDaFR5NDfPT6R28G4kRE0DfNi1IQdl+98Ffr2DOLnzEJS9xfYtW/edr483sEs+GlfPh8supsHuwXxwce/APD1BcvNGYeK2HeggA/fvZuOd/nZlm4BktYfY+uOU/j5ujLokVD+Z0JL4v+2g9IyK5ERXjQIdidpdWe7+7sanWgQ5MZWoEfXAP46+o4LjhmwWuHxRxra2v7xZjrrNuSev8DFkwkGg63NYKjcT/nx2mw+/zUJ+P6DhbRv7cNDPYJ4+18ZV/bmichNV1GLnhK+UWp9RZPExETGjRtn19b78S0OGo1I7TLmmQg6dfDjucSUayr7dikmkxMP3BvAuyszL9u3xFzBwcyzhIa4X7JP3qlSco6X0PCiPmeLLJwtKuaX7GL2pOWz5v1OdOlYny+/PY7BYCD9QAHT5lRNSHtuGfr7H/PYm55sa4+PbcLxPDMffnrE1nZuX+PJX2sX+9ZztatjXK+u0TZ7eK498/BZu/tl/VJEoL/psu+FiIgj1digcMiQIRw+fJivv/76N/uZTCZMJvsPWy0di1ze2Gcj6NKxPgmJKWRftJ/v9+rW2R+j0Ykv1h+7bF+ji4HGDT1I2Xvp2sB1vF0IqO9G3snfDlwNBjAaK9Ovpv9cwAP3+nPqdBlFxdWXtSsutnDkgmNFxRYKCso5kl31/Th6rIQTJ83c1bYe+w8WAuDiYqBtlA8Llx0EIPtYCcfzzLaayOc0DHFn87arW64WkZtLewprcFDYoEEDnJwcWnBF5Jb1QnwE3bsEkjjjJ4qKy/H1MQJQWGSx5dJ7dnA4/n6uTH/9fF3jiHBPANzdnPGpayQi3JPyciuZh+33IvbtEcx3m0/Y9gheaPSwJvzwYx7HjpupV7dyT6GnhzNrvsr59dpODHsijPU/nCDvlJngADeeGRzOmfwyNmyuXDoOCXSj273+bN1xitP5ZdT3NfHknxtiNlewKblyeTppQy5PPNqQ2S9GsXhlJsfzzAT6m+jasT6rPjp8TTOj//nkCE8/1ohfjhZx+Ggxgwc0wmy2kHTB8vKqjw4z/IkwDmQUsj+jkAe7BdE41IMXZ++96vuJyM1jVe3jmhcUWq1WDAYDM2fOdPRQRG5Zj/SpzDP4z1lt7dpnzN3Hml/3wvn5uhLo72Z3fOn8aNvvzZt50/O+QLKPlfBY3PktGw1D3GnTqi5jJu+q9t7+fiamjm9B3TpGTueXsSctn2fH7+DY8coHxiwV0KSxJ73vD8TL04W8U6Vs332aKf+bassFaC6roE2rugx4OBRvLxdOni4lZc8ZRv5th21p2GyuYPTEncTHNmHGpJZ4uLtwIs/MtpRTnC2qfubwclb+n8OYXJ0YF98Mby8je9PzGfvSLtu4oDJwNLk6kRDXlDreRg5kFDL2pV22NDkiIjWVwyqaXIqrqyspKSm0aHHtxaNV0URERKT2cWRFk+6Dki/f6Rp9+X705TvVAA6bKbz44ZBzLBYLs2fPxs/PD4DXXnvtZg5LRERE5LbksKBw7ty5tGnTBh8fH7t2q9VKamoqnp6etvQOIiIiIjeSVSlpHBcUzpgxg0WLFjFnzhy6detmazcajSxdupSWLVs6amgit7yn/tyQrjH1adzAA3NpBbv35bNg6UEOH7l0cuUuHevzyIMhRDTxxNXoRMahIpasyrSr8BHeyIPhT4YR2dSb4EA35i06wH8+OWJ3HWcnGPZEGD3uC8DPpzK9y+dfHWPZB1mc28xyqSWkN5f8zPv/tzKX4V9HNyO6TT3q+7pSVGLhp9R8Fiw7yKFfblyC6C4d6/PH3sFERnjjU8dI7PPJHMiwTz/zcK9genQN4I6mXnh6uND78e8pPHttexhFRG4mhwWFiYmJdO/enaeeeop+/foxa9YsjEajo4YjcltpF+XDR/89yr79BTg7GRgxOJzXX27NU6O2VilJd07bVnXZuvMUby/PoLCwnD7dg3hlchTPjN9hS9FiMjlzNKeEb74/TkJc02qv8+SfG/HHB0OY8fo+Mg6dpXmEN5P+EsnZs+X859f8gA8/vdHunHva+zLx+Ug2bDyfuDrtQCFJ63M5dryEOt5Ghg1qzOsvt+axuC1c60OEk8ZEknOshCXvZ1V73N3Nid2p+Xzzw3EmJkRW28dkcmLL9pNs2X6SkUOaXNtAROSmq1BKGsc+fXzXXXexbds2Ro8eTXR0NCtWrNCSschN8MLU3XavZ81N47OVMURGeJOyp/p8gfMX/2z3+p3lGdx7jx+dOvjZgsJ9+wvY92sFk0sFRK2a1+H7zSdsqWNycs107xpAZDNvW59zCaPP6XxPfbbvPm1XH/mTL7Jtv+fkmlm0IpNlb0QTFOBme9K3vq8rCXFN6dCuHhUVsGvvGeYtOkBOrn1pzCv1xTeVqWeCAi6diPrczGi7qLrXdA8REUdxeCJALy8vli1bRmJiIj169MBi0TKLyM3m6ekMQH5B2WV6nmcwgIe781WdA7B77xnat6lnq04SEeZJ6xZ12ZycV23/ej5GYqJ9+e+6nEte083kRJ/uQRzNKSb3RGXAZzI58cbMNhQXWxg9MYVRE3ZSXGJhzrTWuLjoy6eI2LNWVNywn9qixuQpfPzxx+ncuTPbtm2jcePGjh6OyG0lYXhTUvacIeNQ0eU7/+rx/qG4mZzt6hRfiRUfHsbTw4WVC+6iosKKk5OBd5Zn8OW31V/nwW5BFBVb2LCx6vFH+oQQH9sED3dnMg+fZczkXZSXVy4Bdb83gAorzH4j3dZ/5rw01v67E+3+4MPWHaowIiJyoRoTFAKEhoYSGhrq6GGI3FbGjYygaZgXoybsuOJzunfxZ9gTYSRO/8mWLPpKPXCvPz3vC2Daq6lkHCqiWRNPno+L4MTJUtZ+XbUs3kM9gkhan0tpWdX9Pknrj7F1xyn8fF0Z9Ego/zOhJfF/20FpmZXICC8aBLuTtLqz3TmuRicaBLmxFejRNYC/jr7jgmMGrFZ4/JGGtrZ/vJnOugsqlojIrUll7mpYUCgiN9eYZyLo1MGP5xJTrrjsW7fO/kx8PpLJs/eSnHL6qu85amgTVn54mK++q5z5O5h1liB/N55+rFGVoLB1y7o0DvVgyivVl4g7W2ThbFExv2QXsyctnzXvd6JLx/p8+e1xDAYD6QcKmDYntcp55wLZ73/MY2/6+YS18bFNOJ5n5sNPzz8xffH+RhG5NSkljYJCkdvW2Gcj6NKxPgmJKWQfu7ISbN27+JP4fCRTX021PShytdxMzlRcVEjJUmHFqZptfn17BrFvfwEHMs9WPVgNgwGMxsqt0uk/F/DAvf6cOl1GUXH1e5WLiy0cueBYUbGFgoJyjmSrJJ2I3H4c/qCJiNx8L8RH0PO+QKa9mkpRcTm+PkZ8fYy4up7/SHh2cDgvjj2fdqV7F39eHNucfy45yJ59+bZzPD2cbX1cXAxEhHsSEe6J0cWAv5+JiHBPGgSfr6H8w9Y8Bg9oTMdoX4ICTHS5x4+B/UP5dtP5dDNQ+RDL/Z38+TQpm4uFBLrx1J8bEtnUi0B/E60i6/DyhJaYzRW2YDVpQy5n8suY/WIUrVvWJTjQjbZRdfnLiKb4+7le0/vm7eVCRLgnYQ09AWjUwIOIcE98fc6n0/L1MVb+zb8+SNOksRcR4Z54e+k7uEhNZq2w3rCfa/HWW28RHh6Om5sb7du357vvvvvN/hs2bKB9+/a4ubnRpEkTFi5ceNX31KeUyG3okT4NAPjnrLZ27TPm7mPNV5VLuH6+rgT6nw/m/tg7BBcXJ16Ib8YL8c1s7Z9/lcPMuWlAZQqYpfPP1/h84tGGPPFoQ3bsPk3CpBQAXn/7ACOeDOOF+GbUq2vkxMlSPlmbzXv/ts8N2L1LAAYDfPlt1f185rIK2rSqy4CHQ/H2cuHk6VJS9pxh5N922JaGzeYKRk/cSXxsE2ZMaomHuwsn8sxsSznF2aJry3LQ+W4//j6mue31yxMqk+wvWZVpy23Y/8EQhj0RZuvz1ittAfv3VkTkt3zwwQeMGTOGt956i06dOvH222/z4IMPsnfvXho1alSlf0ZGBn369GHEiBGsWLGCH374gVGjRuHv78+f/vSnK76vwWq13nI7Kzv32+DoIYiIiMhVulQ1o5vhRsYOV/t33X333dx5550sWLDA1taiRQv69+/PrFmzqvSfMGECn3zyCamp5/dQjxw5kpSUFDZt2nTF99XysYiIiMgNZDabyc/Pt/sxm6tPol9aWsq2bdvo2bOnXXvPnj3ZuHFjteds2rSpSv9evXqRnJxMWdmVPyx3Sy4fO/KbhojcOGazmVmzZpGYmIjJdOmqIiIiV+tGxg5Tp05l2rRpdm1Tpkxh6tSpVfqeOHECi8VCYGCgXXtgYCA5OdUn8c/Jyam2f3l5OSdOnCA4OPiKxqmZQhGpNcxmM9OmTbvkN2wRkZooMTGRM2fO2P0kJib+5jkXl/21Wq2/WQq4uv7Vtf+WW3KmUERERKSmMJlMV7y6Ub9+fZydnavMCubm5laZDTwnKCio2v4uLi74+fld8Tg1UygiIiJSQ7i6utK+fXvWrVtn175u3TpiYmKqPadjx45V+iclJREdHY3RaKz2nOooKBQRERGpQcaNG8fixYtZsmQJqampjB07lkOHDjFy5Eigcjl68ODBtv4jR44kKyuLcePGkZqaypIlS3j33XcZP378Vd1Xy8ciUmuYTCamTJmih0xE5JY2cOBA8vLyePnll8nOziYqKorPP/+cxo0bA5Cdnc2hQ4ds/cPDw/n8888ZO3Ysb775JiEhIcyfP/+qchTCLZqnUERERESujpaPRURERERBoYiIiIgoKBQRERERFBSKiIiICAoKRaSGio2NpX///rbfDQYDBoMBo9FIYGAgPXr0YMmSJVRUVDh2oCIitwgFhSJSK/Tu3Zvs7GwyMzNZs2YN999/P3/5y1/o27cv5eXljh6eiEitpzyFIlIrmEwmgoKCAGjQoAF33nkn99xzDw888ABLly4lLi7OwSMUEandNFMoIrVWt27daNOmDR999JGjhyIiUuspKBSRWq158+ZkZmY6ehgiIrWegkIRqdWsVisGg8HRwxARqfUUFIpIrZaamkp4eLijhyEiUuspKBSRWuvrr79m9+7dV130XUREqtLTxyJSK5jNZnJycrBYLBw7doy1a9cya9Ys+vbty+DBgx09PBGRWk9BoYjUCmvXriU4OBgXFxfq1atHmzZtmD9/PkOGDMHJSYseIiK/l8FqtVodPQgRERERcSx9vRYRERERBYUiIiIioqBQRERERFBQKCIiIiIoKBQRERERFBSKiIiICAoKRURERAQFhSIiIiKCgkIRqSUyMzMxGAzs3LnT0UMREbklKSgUkesqNjYWg8GAwWDAxcWFRo0aER8fz6lTp67qGv3797dra9iwIdnZ2URFRV3nEYuICCgoFJEboHfv3mRnZ5OZmcnixYv59NNPGTVq1O+6prOzM0FBQbi4qGS7iMiNoKBQRK47k8lEUFAQoaGh9OzZk4EDB5KUlASAxWJh+PDhhIeH4+7uTmRkJPPmzbOdO3XqVJYtW8bHH39sm3Fcv359leXj9evXYzAY+Oqrr4iOjsbDw4OYmBjS0tLsxjJ9+nQCAgLw9vYmLi6OiRMn0rZtW9vx9evX06FDBzw9PfHx8aFTp05kZWXd8PdIRKSmUVAoIjfUwYMHWbt2LUajEYCKigpCQ0NZvXo1e/fu5aWXXmLSpEmsXr0agPHjxzNgwADbbGN2djYxMTGXvP7f//535syZQ3JyMi4uLgwbNsx2bOXKlcyYMYNXXnmFbdu20ahRIxYsWGA7Xl5eTv/+/enatSu7du1i06ZNPPPMMxgMhhv0boiI1FxahxGR6+6zzz7Dy8sLi8VCSUkJAK+99hoARqORadOm2fqGh4ezceNGVq9ezYABA/Dy8sLd3R2z2UxQUNBl7zVjxgy6du0KwMSJE3nooYcoKSnBzc2NN954g+HDhzN06FAAXnrpJZKSkigsLAQgPz+fM2fO0LdvX5o2bQpAixYtrt8bISJSi2imUESuu/vvv5+dO3eyZcsWEhIS6NWrFwkJCbbjCxcuJDo6Gn9/f7y8vFi0aBGHDh26pnu1bt3a9ntwcDAAubm5AKSlpdGhQwe7/he+9vX1JTY2ll69etGvXz/mzZtHdnb2NY1DRKS2U1AoItedp6cnERERtG7dmvnz52M2m22zg6tXr2bs2LEMGzaMpKQkdu7cydChQyktLb2me51blgZsy74VFRVV2s6xWq12r9977z02bdpETEwMH3zwAXfccQebN2++prGIiNRmCgpF5IabMmUKr776KkePHuW7774jJiaGUaNG0a5dOyIiIvj555/t+ru6umKxWH73fSMjI/nxxx/t2pKTk6v0a9euHYmJiWzcuJGoqChWrVr1u+8tIlLbKCgUkRvuvvvuo1WrVsycOZOIiAiSk5P54osvSE9PZ/LkyWzdutWuf1hYGLt27SItLY0TJ05QVlZ2TfdNSEjg3XffZdmyZezfv5/p06eza9cu2+xhRkYGiYmJbNq0iaysLJKSkkhPT9e+QhG5LelBExG5KcaNG8fQoUNJT09n586dDBw4EIPBwKBBgxg1ahRr1qyx9R0xYgTr168nOjqawsJCvvnmG8LCwq76nk8++SQHDx5k/PjxlJSUMGDAAGJjY22zhx4eHuzbt49ly5aRl5dHcHAwzz33HM8+++z1+rNFRGoNg/XiDTYiIrewHj16EBQUxPLlyx09FBGRGkUzhSJyyyoqKmLhwoX06tULZ2dn3n//fb788kvWrVvn6KGJiNQ4mikUkVtWcXEx/fr1Y/v27ZjNZiIjI3nxxRd59NFHHT00EZEaR0GhiIiIiOjpYxERERFRUCgiIiIiKCgUERERERQUioiIiAgKCkVEREQEBYUiIiIigoJCEREREUFBoYiIiIgA/x/ZoigmJWlbSwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x600 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Pivot the DataFrame to create a heatmap\n",
    "heatmap_data = train_data.pivot_table('ID', 'Rating')\n",
    "\n",
    "# Create the heatmap\n",
    "plt.figure(figsize=(8, 6))\n",
    "sns.heatmap(heatmap_data, annot=True, fmt='g', cmap='coolwarm', cbar=True)\n",
    "plt.title('Heatmap of User Ratings')\n",
    "plt.xlabel('Ratings')\n",
    "plt.ylabel('User ID')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "ab7bc904",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABz/0lEQVR4nO3df3zP9f7/8ft79t4vbGyyH5mfIfkxIqJiYkPmR+rQ0ZGkKEULiX4wnQ6hpDPp13FwEuqc4lCdZcqPHCmN5edHP4hoa9GaH5vtbXt9//Dd+3jb8J7ee71/7Ha9XFwuvV+v5/v1frxej5lHj9fz/XxZDMMwBAAAAAAAAJjIz90BAAAAAAAAoOqhKQUAAAAAAADT0ZQCAAAAAACA6WhKAQAAAAAAwHQ0pQAAAAAAAGA6mlIAAAAAAAAwHU0pAAAAAAAAmI6mFAAAAAAAAExHUwoAAAAAAACmoykFn7R48WJZLBb7n6CgIEVFRal79+6aOXOmcnJyyrwnJSVFFoulQp+Tn5+vlJQUbdiwoULvK++zGjZsqKSkpAod53KWLVumefPmlbvPYrEoJSXFpZ/nap988ok6dOig6tWry2KxaNWqVeWO++GHH2SxWPTCCy9c0ecsWLBAixcvvvJATeTtOXWn+Ph4tWrVqtx9x44d4/oBgKihSnn7v7fUUGV5e07d6d5771WNGjUctnlT7uHZ/N0dAFCZFi1apGuvvVY2m005OTnavHmzZs2apRdeeEHvvPOOevbsaR97//33q3fv3hU6fn5+vqZPny7p3P/wOutKPutKLFu2TLt371ZycnKZfZ9//rnq1atX6TFcKcMwNHjwYDVr1kyrV69W9erV1bx580r5rAULFqhOnTq69957K+X4ruTNOQUAeA9qKO/995YaqnzenFNP5E25h2ejKQWf1qpVK3Xo0MH++o477tBjjz2mm2++WYMGDdK3336ryMhISVK9evUq/R+j/Px8hYSEmPJZl3PjjTe69fMv56efftKvv/6q22+/XT169HB3OBVmGIbOnDmj4OBg0z7T03NqhoKCAlOv+e9R+vsAADwRNdTFefq/t9RQFefpOTWDN9VQ8C18fQ9VTv369fXiiy/q5MmTev311+3by5sO/umnnyo+Pl4REREKDg5W/fr1dccddyg/P18//PCDrrrqKknS9OnT7dPcS+8WlB5v+/btuvPOO1W7dm01adLkop9VauXKlWrTpo2CgoLUuHFj/fWvf3XYXzqt/ocffnDYvmHDBlksFvs0+Pj4eH344Yc6dOiQwzT8UuVNU969e7cGDBig2rVrKygoSG3bttWSJUvK/Zzly5frqaeeUkxMjEJDQ9WzZ0/t37//4hf+PJs3b1aPHj1Us2ZNhYSEqEuXLvrwww/t+1NSUuwF5xNPPCGLxaKGDRs6dexSpddp/fr1euihh1SnTh1FRERo0KBB+umnn+zjGjZsqD179mjjxo32a3T+Z504cUITJ05Uo0aNFBAQoKuvvlrJyck6ffq0w+dZLBY98sgjeu2119SiRQsFBgbar9306dPVqVMnhYeHKzQ0VNdff70WLlwowzDKxL1s2TJ17txZNWrUUI0aNdS2bVstXLhQkmfkdMeOHUpKSlLdunUVGBiomJgY9e3bV0eOHLlkPkq/OvfZZ5/pxhtvVHBwsK6++mo988wzKi4udhhbVFSk5557Ttdee60CAwN11VVXacSIEfrll18cxpV+XeP9999Xu3btFBQUZL/r7gq//PKLRo0apdjYWHscN910k9atW+cwbt26derRo4dCQ0MVEhKim266SZ988onDmEv9PgAAb0ENdQ411DnUUFW3hnJ17hctWqTmzZsrODhYHTp00NatW2UYhubMmaNGjRqpRo0auvXWW/Xdd985HSO8BzOlUCXddtttqlatmjZt2nTRMT/88IP69u2rW265RX//+99Vq1YtHT16VGlpaSoqKlJ0dLTS0tLUu3dvjRw5Uvfff78k2YusUoMGDdJdd92lBx98sMwv4gtlZmYqOTlZKSkpioqK0ttvv61HH31URUVFmjhxYoXOccGCBRo1apS+//57rVy58rLj9+/fry5duqhu3br661//qoiICC1dulT33nuvfv75Z02aNMlh/JNPPqmbbrpJf/vb33TixAk98cQT6tevn/bt26dq1apd9HM2btyohIQEtWnTRgsXLlRgYKAWLFigfv36afny5RoyZIjuv/9+xcXFadCgQRo7dqyGDh2qwMDACp1/qfvvv199+/bVsmXL9OOPP+rxxx/Xn/70J3366aeSzhWwd955p8LCwrRgwQJJsn9Wfn6+unXrpiNHjujJJ59UmzZttGfPHk2dOlW7du3SunXrHAqaVatW6bPPPtPUqVMVFRWlunXrSjr3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58IikjUQAHg7aqiyqKHKooYqy5trqIqoaO4BZkqhyjl8+LAmTpyosLAwjR492qn3VKtWTZ06ddIrr7wiSfZp4BW5Y+SMPXv26Ouvv3bYtmzZMtWsWVPXX3+9JNmfbLFz506HcatXry5zvMDAQKdj69Gjhz799FOHp6pI0j/+8Q+FhIS45FG51atXV6dOnfT+++87xFVSUqKlS5eqXr16lfZVrEu52HVKSkrS999/r4iICHXo0KHMH2eeZmOxWOTv7++wcGlBQYHeeusth3GJiYmqVq2aXn311SuKtTyVmVOLxaK4uDi99NJLqlWrllNfjTh58mSZn9Nly5bJz89PXbt2lXTumh8/flzFxcXlXvPmzZtfccw9e/bUiRMnyi3W3n33Xfn5+enWW28t973169fXI488ooSEBPu53nTTTapVq5b27t1bbqwdOnSw39UDAF9ADVU+aihqqIrwxhqqPJWZe1QtzJSCT9u9e7f9e8w5OTn67LPPtGjRIlWrVk0rV64s85SX87322mv69NNP1bdvX9WvX19nzpyxd/x79uwp6dwdhwYNGujf//63evToofDwcNWpU+eKf9nGxMSof//+SklJUXR0tJYuXar09HTNmjVLISEhkqQbbrhBzZs318SJE3X27FnVrl1bK1eu1ObNm8scr3Xr1nr//ff16quvqn379vLz81OHDh3K/exp06bpgw8+UPfu3TV16lSFh4fr7bff1ocffqjZs2crLCzsis7pQjNnzlRCQoK6d++uiRMnKiAgQAsWLNDu3bu1fPlyt8wkKb1z9c4776hx48YKCgpS69atlZycrPfee09du3bVY489pjZt2qikpESHDx/W2rVrNWHCBHXq1OmSx+7bt6/mzp2roUOHatSoUTp+/LheeOGFMk/CadiwoZ588kn9+c9/VkFBgf74xz8qLCxMe/fu1bFjx+yP6XVnTj/44AMtWLBAAwcOVOPGjWUYht5//3399ttvSkhIuOz7IyIi9NBDD+nw4cNq1qyZPvroI7355pt66KGH7E/Vueuuu/T222/rtttu06OPPqqOHTvKarXqyJEjWr9+vQYMGKDbb7+9QnGXuvvuu7VgwQINHjxYkydP1g033KCCggJ7HGPHjlXjxo0lSXl5eerevbuGDh2qa6+9VjVr1tS2bduUlpamQYMGSZJq1Kih1NRUDR8+XL/+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/fr1U0xMjCwWi1atWmXfZ7PZ9MQTT6h169aqXr26YmJidM899+inn35yOEZhYaHGjh2rOnXqqHr16urfv7+OHDniMCY3N1fDhg1TWFiYwsLCNGzYMP32228mnCEAAKgKaEoBAAB4mdOnTysuLk7z588vsy8/P1/bt2/XM888o+3bt+v999/XN998o/79+zuMS05O1sqVK7VixQpt3rxZp06dUlJSkoqLi+1jhg4dqszMTKWlpSktLU2ZmZkaNmxYpZ8fAACoGvzdHQAAAAAqpk+fPurTp0+5+8LCwpSenu6wLTU1VR07dtThw4dVv3595eXlaeHChXrrrbfUs2dPSdLSpUsVGxurdevWqVevXtq3b5/S0tK0detWderUSZL05ptvqnPnztq/f7+aN29euScJAAB8Hk0pAAAAH5eXlyeLxaJatWpJkjIyMmSz2ZSYmGgfExMTo1atWmnLli3q1auXPv/8c4WFhdkbUpJ04403KiwsTFu2bCm3KVVYWKjCwkL76xMnTkg695VCm83mknMpPY7NZlNJSYmCg4PPVbTeNP/fX1KwVFJS4rLr4unOzxu8AznzTuTN+/hqzpw9H7c2pTZt2qQ5c+YoIyNDWVlZWrlypQYOHCjp3Ak8/fTT+uijj3TgwAGFhYWpZ8+eev755xUTE2M/RmFhoSZOnKjly5eroKBAPXr00IIFC1SvXj37mNzcXI0bN06rV6+WJPXv31+pqan2wgwAAMBXnTlzRpMnT9bQoUMVGhoqScrOzlZAQIBq167tMDYyMlLZ2dn2MXXr1i1zvLp169rHXGjmzJmaPn16me1r165VSEjI7z0VB6WzwZYvX+7S45qijaRE6ejRozp69Ki7ozHVhbP44PnImXcib97H13KWn5/v1Di3NqVK10MYMWKE7rjjDod956+HEBcXp9zcXCUnJ6t///766quv7OOSk5O1Zs0arVixQhEREZowYYKSkpKUkZGhatWqSTq3HsKRI0eUlpYmSRo1apSGDRumNWvWmHeyAAAAJrPZbLrrrrtUUlKiBQsWXHa8YRiyWCz21+f/98XGnG/KlCkaP368/fWJEycUGxurxMREe0Ps97LZbEpPT1dCQoL27t2rrl27SiMkRbnk8ObIlrTo3A3auLg4d0djivPzZrVa3R0OnEDOvBN58z6+mrPS2dKX49amFOshAAAAVA6b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4OBgxcfHa8+ePQ7HKSws1NixY1WnTh1Vr15d/fv315EjR1waKwAAqLoq3JS67rrrtHPnTnXs2FEJCQk6ffq0Bg0apB07dqhJkyaVESMAAIDXM7OGmjVrll577TXNnz9f+/bt0+zZszVnzhylpqbax8yePVtz587V/PnztW3bNkVFRSkhIUEnT560j0lOTtbKlSu1YsUKbd68WadOnVJSUpKKi4tdGi8AAKiaKrzQuSRFRUVp+vTpro6ljLNnzyolJUVvv/22srOzFR0drXvvvVdPP/20/PzO9dMMw9D06dP1xhtvKDc3V506ddIrr7yili1b2o9TWFioiRMnavny5SooKFCPHj20YMGCMguNAgAAVCazaqjPP/9cAwYMUN++fSVJDRs21PLly/XVV19JOlc/zZs3T0899ZQGDRokSVqyZIkiIyO1bNkyjR49Wnl5eVq4cKHeeust9ezZU5K0dOlSxcbGat26derVq1elnwcAAPBtV9SUys3N1cKFC7Vv3z5ZLBa1aNFCI0aMUHh4uEuDK73Lt2TJErVs2VJfffWVRowYobCwMD366KOS/neXb/HixWrWrJmee+45JSQkaP/+/apZs6akc3f51qxZoxUrVigiIkITJkxQUlKSMjIyVK1aNZfGDAAAcDFm1VA333yzXnvtNX3zzTdq1qyZvv76a23evFnz5s2TJB08eFDZ2dlKTEy0vycwMFDdunXTli1bNHr0aGVkZMhmszmMiYmJUatWrbRly5Zym1KFhYUqLCy0vz5x4oQkyWazyWazueTcSo9js9lUUlKi4ODgcxVthef/u5G/pGCppKTEZdfF052fN3gHcuadyJv38dWcOXs+FW5Kbdy4UQMGDFBoaKg6dOggSfrrX/+qZ599VqtXr1a3bt0qesiL4i4fAADwFWbWUE888YTy8vJ07bXXqlq1aiouLtZf/vIX/fGPf5QkZWdnS5IiIyMd3hcZGalDhw7ZxwQEBKh27dplxpS+/0IzZ84sdybY2rVry33y4O+Rnp4uSVq+fLlLj2uKNpISpaNHj+ro0aPujsZUpXmD9yBn3om8eR9fy1l+fr5T4yrclHr44Yc1ePBgvfrqq/ZZRsXFxRozZowefvhh7d69u6KHvCh33eUDAABwNTNrqHfeeUdLly7VsmXL1LJlS2VmZio5OVkxMTEaPny4fZzFYnF4n2EY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2LBBgwYN0kcffaSPPvpIb731lt544w3961//umwsgM8zAMAwjOHDhxsDBgywv+7WrZtx8803O4y54YYbjCeeeML+WpKxcuVKhzG33HKLMWPGDIdtb731lhEdHe3wvuTk5MvGNGbMGOOOO+6wv46JiTGeeuqpi44vL55p06YZcXFxDsf4y1/+4jDmhhtuMMaMGWMYhmEcPHjQkGT87W9/s+/fs2ePIcnYt2+fYRiG0bp1ayMlJeWy8Zdq0KCB0bt3b4dtQ4YMMfr06WMYhmF88sknRmhoqHHmzBmHMU2aNDFef/11+3lYrVYjJyfnkp+1aNEiIywsrNx9YWFhxqJFiwzDMIyxY8cat956q1FSUlJmnCvjAQDA11FD+UYNtX79ekOSkZubaxhG+TXVd999Z1gsFuPo0aMO23v06GFMmTLF/j5JxnfffWffP3r0aCMkJMQ4efKkfVuvXr2M0aNHX+YKAL7P3z2tMADeoE2bNg6vo6OjlZOTc8n3ZGRkaNu2bQ539YqLi3XmzBnl5+crJCREktShQ4cy733ttdf0t7/9TYcOHVJBQYGKiors08ZzcnL0008/qUePHld8PidOnNBPP/2km266yWH7TTfd5DDNW3I89+joaHsM1157rcaNG6eHHnpIa9euVc+ePXXHHXeUuVYX6ty5c5nX8+bNk3Tump06darMug0FBQX6/vvv7a8bNGigq666yrmTvYx7771XCQkJat68uXr37q2kpCQlJia6LR4AAHwJNdQ5vlZDbd++XYZhqFmzZg7bCwsLHWIICQlRkyZN7K8jIyPVsGFDh1lhkZGRl/2ZAKoCmlIALspqtTq8tlgsKikpueR7SkpKNH36dA0aNKjMvqCgIPt/V69e3WHfu+++q8cee0wvvviiOnfurJo1a2rOnDn64osvJEnBwcFXehplWCwWh9eGYZTZdv65l+4rPff7779fvXr10ocffqi1a9dq5syZevHFFzV27NgriqOkpETR0dEO6xGUOv+pLxdes/KEhobq1KlTKi4uVrVq1ezbi4uLderUKYWFhUmSrr/+eh08eFD/+c9/tG7dOg0ePFg9e/bUv/71L5fGAwBAVUQN5TjeG2ooZ5SUlKhatWrKyMhwqLMkOTScysv/lfxMAFUBTSkAV8xqtZZZoPH666/X/v377esUOOuzzz5Tly5dNGbMGPu28+9w1axZUw0bNtQnn3yi7t27Ox3P+UJDQxUTE6PNmzera9eu9u1btmxRx44dKxRvbGysHnzwQT344IOaMmWK3nzzzUsWVFu3bi3z+tprr5V07pplZ2fL39/fYbHTK3HttdequLhYO3bscLiTun37dhUXF6t58+b2baGhoRoyZIiGDBmiO++8U71799avv/7q0ngAAEBZ1FCeV0NdKCAgoMw1adeunYqLi5WTk6NbbrnFpZ8HVFU0pQBcsdIC56abblJgYKBq166tqVOnKikpSbGxsfrDH/4gPz8/7dy5U7t27dJzzz130WNdc801+sc//qGPP/5YjRo10ltvvaVt27apUaNG9jEpKSl68MEHVbduXfXp00cnT57Uf//7X3shU148F3r88cc1bdo0NWnSRG3bttWiRYuUmZmpt99+2+nzTk5OVp8+fdSsWTPl5ubq008/VYsWLS75nv/+97+aPXu2Bg4cqPT0dP3zn//Uhx9+KEnq2bOnOnfurIEDB2rWrFlq3ry5fvrpJ3300UcaOHBgudP0L+a6665Tnz59dN9992nu3Llq0qSJvv/+e40fP159+vTRddddJ0l66aWXFB0drbZt28rPz0///Oc/FRUVpVq1ark0HgAAUBY1lOfVUBdq2LChTp06pU8++URxcXEKCQlRs2bNdPfdd+uee+7Riy++qHbt2unYsWP69NNP1bp1a912221X/HlAVcXT9wBcsRdffFHp6emKjY1Vu3btJEm9evXSBx98oPT0dN1www268cYbNXfuXDVo0OCSx3rwwQc1aNAgDRkyRJ06ddLx48cd7vhJ0vDhwzVv3jwtWLBALVu2VFJSksOTTsqL50Ljxo3ThAkTNGHCBLVu3VppaWlavXq1mjZt6vR5FxcX6+GHH1aLFi3Uu3dvNW/eXAsWLLjkeyZMmKCMjAy1a9dOf/7zn/Xiiy+qV69eks5N3/7oo4/UtWtX3XfffWrWrJnuuusu/fDDD4qMjHQ6rlIrVqxQz5499dBDD+m6667TQw89pB49emj58uX2MTVq1NCsWbPUoUMH3XDDDfrhhx/00Ucfyc/Pz+XxAAAAR9RQnllDna9Lly568MEHNWTIEF111VWaPXu2pHNPKbznnns0YcIENW/eXP3799cXX3yh2NjY3/V5QFVlMQzDcHcQAODLGjZsqOTkZCUnJ7s7FAAAAK9BDQX4PmZKAQAAAAAAwHQ0pQAAAAAAAGA6vr4HAAAAAAAA0zFTCgAAAAAAAKajKQUAAAAAAADT0ZQCAAAAAACA6WhKAQAAAAAAwHQ0pQAAAAAAAGA6mlIAAAAAAAAwHU0pAAAAAAAAmI6mFAAAAAAAAExHUwoAAAAAAACm+3/tq/QbI1GB3wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Distribution of interactions\n",
    "plt.figure(figsize=(12, 5))\n",
    "plt.subplot(1, 2, 1)\n",
    "train_data['ID'].value_counts().hist(bins=10, edgecolor='k')\n",
    "plt.xlabel('Interactions per User')\n",
    "plt.ylabel('Number of Users')\n",
    "plt.title('Distribution of Interactions per User')\n",
    "\n",
    "plt.subplot(1, 2, 2)\n",
    "train_data['ProdID'].value_counts().hist(bins=10, edgecolor='k',color='green')\n",
    "plt.xlabel('Interactions per Item')\n",
    "plt.ylabel('Number of Items')\n",
    "plt.title('Distribution of Interactions per Item')\n",
    "\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "6d330260",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, 'Most Popular items')"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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pjmT7t276+KLL9aYMWM0depURUREaMGCBfriiy/O+xjPpEOHDnrnnXc0Z84cderUSQ0aNFDnzp01atQoLViwQAMGDNCvfvUrXXvttYqIiNCePXu0fPlyDRkyRDfffPMFv/+XX36p+++/X7feeqtatWqlyMhILVu2TF9++aUefvjhajhCwAKhvksXqMv+8ymeMzn1KR5jjDlw4IAZM2aMcbvdJjw83KSkpJgpU6aYY8eO+ee89957Jj093TRr1sxERkaaxMREM2DAALNq1aqAff3lL38xbdq0MREREUaSmTp1aqW1nHya5q233jpjzeXl5WbmzJmmdevWJiIiwiQkJJg77rjDFBQUBMzr1auXadeuncnNzTWdO3c2TqfTuN1u85vf/MaUlZUFzC0sLDTDhw838fHxJi4uztxxxx1m3bp15/QUz5o1a0y3bt1MdHS0adq0qfn5z39uNmzYUGHbjIwM06hRozMe23863VM833//vRk+fLi56KKLjMPhCKilrKzM/PGPfzRXXnmladiwoWncuLFp06aNue+++8zWrVv981JSUszAgQMrvJ8kM378+ICxk08yPfHEE8YYY7777juTmZlp2rRpYxo1amQaN25srrjiCvP000+b48ePn/OxATZzGGNMqMIRgLovLS1N+/fv16ZNm0JdCoBahHtQAACAdQgoAADAOlziAQAA1uEMCgAAsA4BBQAAWIeAAgAArFMr/1DbiRMntHfvXsXExATtT1YDAIDqZYzR4cOH5fF41KDBmc+R1MqAsnfvXiUnJ4e6DAAAcB4KCgoqfI7XqWplQDn5gVsFBQVB+URSAABQ/bxer5KTk8/pgzNrZUA5eVknNjaWgAIAQC1zLrdncJMsAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDrhoS7Aag5HqCuoHsaEugIAAKqEMygAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA64SHugDgnDgcoa6gehgT6goAoFbgDAoAALBOlQJKdna2rrnmGsXExCgxMVFDhw7VN998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jx49TFZWlv/1a6+9Zrp06WKMMeb77783V111lfnlL38ZqvJwio0bN5oGDRqEuox6we12m/379xtjjNmxY4dxuVzG5XKZfv36mebNm5u4uDizZcuWEFdZP3Tu3NlMnDix0vUTJ040nTt3rsGKah5nUGpI9+7ddf3112v69OlauHChxo0bp7Fjx+oPf/iDJOmRRx5RXl6ePv744xBXWvdFR0dr06ZNatmypSTpxIkTatiwoQoKCpSUlKScnBxlZmbq22+/DXGl9cO77757xvU7duzQAw88oPLy8hqqqP5q0KCBioqKlJiYqNtuu01FRUVaunSpoqOj5fP5NHz4cDVs2FBvvfVWqEut86KiorRx40Zdfvnlp13/9ddf6+qrr9bRo0druLKaw02yNWTz5s2aP3++JGnEiBH62c9+pmHDhvnX33bbbXr55ZdDVV69kpiYqMLCQn9A+e6773T8+HHFxsZKklq1aqXvv/8+lCXWK0OHDpXD4dCZ/l/J4XDUYEWQpM8//1wvvfSSoqOjJUlOp1O//e1vNXz48BBXVj+43W6tWbOm0oDy2Wefye1213BVNYuAEgINGjRQw4YNddFFF/nHYmJiVFxcHLqi6pGhQ4dqzJgxeuKJJ+R0OvXf//3f6tWrl6KioiRJ33zzjZo1axbiKusPt9utP//5zxo6dOhp12/cuFGdOnWq2aLqsZNh0OfzKSkpKWBdUlKS/v3vf4eirHpn8uTJGjNmjNavX69+/fpV+NiBl156SbNmzQp1mUFFQKkhl1xyibZt26bLLrtM0o/pt0WLFv71BQUFdT4N22L69OkqLCzU4MGDVV5erm7duun111/3r3c4HPXiET5bdOrUSRs2bKg0oJzt7AqqV58+fRQeHi6v16t//etfAR8OuHv3biUkJISwuvpj3LhxatKkiZ5++mk9//zz/kucYWFh6tSpk+bPn68RI0aEuMrgIqDUkLFjxwZcQ2/fvn3A+g8++ICneGpI48aNtWjRIh07dkzHjx9X48aNA9b3798/RJXVT7/+9a915MiRStdfdtllWr58eQ1WVH9NnTo14PXJyzsn/e1vf+ODAmvQyJEjNXLkSJWVlWn//v2SpISEBEVERIS4sprBTbIAAMA6/ElAAABgHQIKAACwDgEFAABYh4ACoFbIysrSVVddFeoyANQQAgqAC5KZmSmHwyGHw6GIiAi1bNlSkydPPuOTOdXh1MCSlZXlryM8PFwJCQnq2bOnZs2aJZ/PF9RaAFQ/AgqAC3bjjTeqsLBQO3bs0PTp0/Xss89q8uTJFeaVlZUFtY527dqpsLBQu3fv1vLly3XrrbcqOztb3bt31+HDh4P63gCqFwEFwAVzOp1yuVxKTk7W6NGjdfvtt2vJkiX+sxyvvPKKWrZsKafTKWOMdu/erSFDhqhx48aKjY3ViBEj9N133wXs87HHHlNSUpJiYmJ0zz336NixY2etIzw8XC6XSx6PRx06dNCECRO0YsUKbdq0STNnzgzW4QMIAgIKgGoXFRXlP1uybds2vfnmm3r77be1ceNGST9+3MD333+vFStWKCcnR9u3b9fIkSP927/55puaOnWq/vCHP2jdunVyu9169tlnz6uWNm3aKD09Xe+8884FHxeAmsNfkgVQrf7+97/rjTfeUJ8+fSRJpaWleu2119S0aVNJUk5Ojr788kvl5+crOTlZkvTaa6+pXbt2ysvL0zXXXKNZs2bp7rvv1s9//nNJP348wSeffHJOZ1FOp02bNnxSOFDLcAYFwAV777331LhxYzVs2FDdunVTz5499cwzz0iSUlJS/OFEkrZs2aLk5GR/OJGkn/zkJ7rooou0ZcsW/5xu3boFvMepr6vCGMMnIgO1DGdQAFyw3r17a86cOYqIiJDH4wn4rJBGjRoFzK0sLAQzRGzZskWpqalB2TeA4OAMCoAL1qhRI1122WVKSUk56weZ/eQnP9Hu3btVUFDgH/vnP/+p4uJitW3bVpLUtm1brV27NmC7U1+fq6+//loffvihhg0bdl7bAwgNzqAAqFF9+/bVFVdcodtvv12zZs3S8ePHNW7cOPXq1UudO3eWJP3qV79SRkaGOnfurJ/+9KdasGCBNm/erJYtW55x38ePH1dRUZFOnDihAwcOKDc3V9OnT9dVV12lX//61zVxeACqCQEFQI1yOBxasmSJJkyYoJ49e6pBgwa68cYb/fesSD9+zPz27dv10EMP6dixYxo2bJjGjh2rjz766Iz73rx5s9xut8LCwhQXF6ef/OQnmjJlisaOHSun0xnsQwNQjRzGGBPqIgAAAP4T96AAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYJ3/B3AwqFabrVi/AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Most popular items\n",
    "popular_items = train_data['ProdID'].value_counts().head(5)\n",
    "popular_items.plot(kind='bar',color='red')\n",
    "plt.title(\"Most Popular items\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "b9b8df99",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<Axes: xlabel='Rating'>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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x6auq6vGGKM9e/YoJSXlsI9zzIaYmJgY9ezZU8uWLdOll17qLF+2bJl+//vfh4yPjY1VbGxs0LITTjihzm0kJCTU6w/VHHU29NjUdTb06LbOhh6bus6GHt3W2dBjU9fZ0KPbOht6bOq62mq8db3sdJBjNsRI0pQpU5STk6NevXopMzNTTz75pLZt26YbbrihuVsDAADN7JgOMaNHj9aPP/6oe++9VyUlJcrIyNA777yjtLS05m4NAAA0s2M6xEjSxIkTNXHixEZ9zNjYWE2fPj3k5adjqc6GHpu6zoYe3dbZ0GNT19nQo9s6G3ps6jobenRbZ0OPTV3ndluHOqa/7A4AAKA2x+yX3QEAANSFEAMAAKxEiAEAAFYixAAAACsdVyGmurpaO3fuVFlZmaqrq5tkm4FAQN98803Q7zodbcuXL1dlZeURjW2O50SSdu7cGfY3sI43B57/H374oblbQT0117HT0jT0GGjIHFufubK5MFfW7bgIMYsWLdKFF16oNm3aKCUlRcnJyWrTpo0uvPBCLV68+LD1RzpZzZ8/X/n5+ZKkffv26dprr1VcXJy6du2qtm3b6oYbbgh7oH311VdBP3S1cuVKjRgxQmeeeaYuueQSLVmypF77m52dra1bt9Y5pr7PSY8ePXTfffepuLi4Xr389NNPuuyyy5SWlqabbrpJ1dXVuvbaa5WcnKyTTjpJWVlZKikpCVv79NNPa+zYsXruueckSa+++qq6d++uU045RdOnT691m//85z81c+ZMPfbYYyETY0VFha655po6e26sk9OmTZt0yimnhF339ttv67e//a3i4uKUkpKipKQknXDCCcrJydG2bdsO+9jNGX7qM6m2xH84NHQ+OdjROIm6PVYbws2x6uYYcDvH1uZwc6XbudnNHNSQubIxNTQ01TXvHRWN8WONx7LHH3/cxMTEmBtuuMEsWrTIrFq1ynz88cdm0aJF5oYbbjCxsbHmySefDFv7+uuvm6ysLBMTE2MiIiJMRESEiYmJMVlZWWbRokUh40877TSzdu1aY4wxU6dONSeffLJ5/fXXzaZNm8zixYtN165dza233hpSFxERYXbu3GmMMeaDDz4wERERZtiwYeb+++83l112mYmIiDB5eXkhdeeee27Ym8fjMd27d3fuN8Zz4vF4TIcOHUxkZKQZNGiQ+dvf/mb2799/2Of/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q23ZUGdDjw2ps+Hv7aZHW+ps6FFq2r+dDT263Z4t84IN+ya17P+/jvsQM3v2bFd19Qk/xhh5PB7NmjWrXtuwoc6GHhtSd8Cx/Pc+wG0gt6HOhh4lNenfzoYe3W7PbY821DV1j1LL/v/ruHhPzPbt2zVv3jytWrVKpaWl8ng8SkpKUlZWlm688UZ16tTpqG4/JiZG//znP513ZbekOht6bEidGzb0CAAtQYu/ErNy5UoNGTJEqampys7OVnZ2towxKisr0+LFi/Xoo4/q3Xff1YUXXljn45SXl+v5559XUVGRkpOTNXbsWKWmpgaNmTJlStja6upqPfDAA+rQoYMkhXxszYY6G3psSJ306w+X5efnKzMzU6effrq+/PJLPfLIIwoEArryyitDXue1ocfmqqtLcXGxpk+frmeffdbKfausrFRBQYHat28f8qmiffv26bXXXtNVV13VKNuzoUe323Pbow11Td3j4dR2zLmtORp9uulRUsv/AchevXrV+cU8ubm5plevXiHLk5OTzQ8//GCM+fWbC30+n/H5fGbgwIGmU6dOxuv1mk2bNgXVeDwec84554R806XH4zHnn3++6devn+nfv3/Itmyos6HHhtS9++67JiYmxrRv3960atXKvPvuu+bEE080l1xyiRkwYICJiooy//jHP6zrsTnqDifcb/DYsm+bN282aWlpzpeg9e3bN+hH8mr7Fl0327OhR7fbc9ujDXVN3eORqOtHGetbc7T6dNOjMcfBN/a6/a2Tg7/18vLLLzf9+vUzP//8szHGmH379pmhQ4ea//iP/wiqmTVrlklPTw850A/31dY21NnQY0PqMjMzzZ133mmMMeaVV14x7dq1c363xphfvxl24MCB1vXYHHVLliyp8zZnzpyQycqWfRsxYoQZOnSo2bVrlykqKjLDhg0z6enpztep1zaBu9meDT263Z7bHm2oa+oejXF3zLmpaUifbrd3OC0+xKSnpzs/+x3Os88+G/bn5Q8OMeFOOPn5+aZTp04hdZ988onp2rWrueWWW0xVVZUx5vAnJ1vqbOjRbV1CQoIpKioyxhhTXV1toqKiTEFBgbP+iy++MElJSVb22NR1B/6F5vF4ar0dOlnZsm+JiYnm888/D1o2ceJE07lzZ/PNN9/UOoG72Z4NPbrdntsebahr6h6NcXfMualpSJ9ut3c4Lf57YqZOnaobbrhBkyZN0pIlS5Sfn681a9ZoyZIlmjRpkm688UbddtttYWsPfH9DIBBQUlJS0LqkpCTt2rUrpOb8889XQUGBdu3apV69eumLL744ou+BsKHOhh4bUndARESEWrVqpRNOOMFZFh8fL7/fb2WPTV2XnJys//u//1NNTU3Y26efftrsPbqtq6ysVFRU8FsJ//rXv2r48OHq27evvvrqqzq35bbPY7lHN9tz26MNdU3do+TumHN7nLrts6HzQq3qHXsstHDhQtO7d28TFRXlJL6oqCjTu3dv8+qrr4at8Xg8pkePHubcc881bdu2Na+//nrQ+hUrVoT9mfKDvfLKKyYpKclEREQc9l/mttXZ0GN96s466yzz7rvvOve/+OILs3//fuf+Rx99FPaKnQ09NnXdsGHDzF133VXrfoT7gThb9u388883L7zwQtj9uummm8wJJ5wQ9l+TbrZnQ49ut+e2RxvqmrpHY9wdc25qGtKn2+0dznERYg6oqqoyO3bsMDt27HAu4ddmxowZQbe8vLyg9VOnTjWXX375YbdZXFxsFi9ebPbu3VuvXm2os6HHI62bN2+eeeutt2pdf8cddwT9yq5NPTZ13Ycffhh0MjzU3r17zfLly5u1R7d1s2bNMkOGDKm17sYbbww7EbvZng09ut2e2x5tqGvqHo1xd8y5qWlIn263dzjHxffEAACAlqfFvycGAAC0TIQYAABgJUIMAACwEiEGAABYiRADwFpbt26Vx+NRYWFhc7cCoBkQYgAcdePGjZPH45HH41FUVJQ6d+6sG2+8UeXl5fV6jBEjRgQtS01NVUlJiTIyMhq5YwA2IMQAaBKDBw9WSUmJtm7dqqefflpvvvmmJk6c2KDHjIyMlM/nC/kGUQDHB0IMgCYRGxsrn8+nTp06KTs7W6NHj9bSpUslSdXV1Ro/frzS09PVunVrdevWTY888ohTO2PGDD3//PNasmSJc0Vn+fLlIS8nLV++XB6PR//4xz/Uq1cvtWnTRllZWdq8eXNQLzNnzlRiYqLi4+N17bXX6vbbb9c555zTVE8FgEZCiAHQ5L799lvl5eUpOjpaklRTU6NOnTrptdde08aNG3X33Xfrjjvu0GuvvSbp199AGzVqlHM1p6SkRFlZWbU+/p133qmHHnpI69atU1RUlK655hpn3csvv6z7779ff/rTn1RQUKDOnTtr3rx5R3eHARwVXIMF0CTeeusttW3bVtXV1dq3b58k6eGHH5YkRUdH65577nHGpqena9WqVXrttdc0atQotW3bVq1bt1YgEJDP5zvstu6//3717dtXknT77bfrd7/7nfbt26dWrVrp0Ucf1fjx43X11VdLku6++24tXbpUe/fubexdBnCUcSUGQJPo37+/CgsLtWbNGk2ePFmDBg3S5MmTnfWPP/64evXqpRNPPFFt27bVU089pW3btrna1llnneX8d3JysiSprKxMkrR582ZdcMEFQeMPvQ/ADoQYAE0iLi5Op512ms466yz95S9/USAQcK6+vPbaa/rjH/+oa665RkuXLlVhYaGuvvpqVVVVudrWgZepJMnj8Uj69SWrQ5cdwE/IAXYixABoFtOnT9f//M//aMeOHfroo4+UlZWliRMn6txzz9Vpp52mb775Jmh8TEyMqqurG7zdbt266ZNPPglatm7dugY/LoCmR4gB0Cz69eunM888U7NmzdJpp52mdevW6e9//7u++uor3XXXXVq7dm3Q+JNPPlmff/65Nm/erB9++EH79+93td3JkyfrmWee0fPPP6+ioiLNnDlTn3/+ecjVGQDHPkIMgGYzZcoUPfXUUxoxYoRGjhyp0aNHq3fv3vrxxx9DvkNmwoQJ6tatm/O+mY8//tjVNq+44gpNmzZNU6dO1XnnnactW7Zo3LhxatWqVWPsEoAm5DG8GAzgODdw4ED5fD69+OKLzd0KgHrgI9YAjiv/+te/9Pjjj2vQoEGKjIzUK6+8ovfee0/Lli1r7tYA1BNXYgAcVyorKzVs2DB9+umnCgQC6tatm/7rv/5LI0eObO7WANQTIQYAAFiJN/YCAAArEWIAAICVCDEAAMBKhBgAAGAlQgwAALASIQYAAFiJEAMAAKxEiAEAAFYixAAAACv9Pz6U/gGcF9eRAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# most rated counts\n",
    "train_data['Rating'].value_counts().plot(kind='bar',color='red')"
   ]
  },
  {
   "cell_type": "raw",
   "id": "c7b2cf34",
   "metadata": {},
   "source": [
    "# Step 2: EDA (Exploratory Data Analysis)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "dfec3404",
   "metadata": {},
   "source": [
    "# Step 3: Data Cleaning and Tags Creations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "c16cf5b9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting spacy\n",
      "  Obtaining dependency information for spacy from https://files.pythonhosted.org/packages/39/e1/08681583569f435347ced0535b27c073fcc9a927d9b4293c963092f2d01c/spacy-3.7.5-cp311-cp311-win_amd64.whl.metadata\n",
      "  Downloading spacy-3.7.5-cp311-cp311-win_amd64.whl.metadata (27 kB)\n",
      "Collecting spacy-legacy<3.1.0,>=3.0.11 (from spacy)\n",
      "  Obtaining dependency information for spacy-legacy<3.1.0,>=3.0.11 from https://files.pythonhosted.org/packages/c3/55/12e842c70ff8828e34e543a2c7176dac4da006ca6901c9e8b43efab8bc6b/spacy_legacy-3.0.12-py2.py3-none-any.whl.metadata\n",
      "  Downloading spacy_legacy-3.0.12-py2.py3-none-any.whl.metadata (2.8 kB)\n",
      "Collecting spacy-loggers<2.0.0,>=1.0.0 (from spacy)\n",
      "  Obtaining dependency information for spacy-loggers<2.0.0,>=1.0.0 from https://files.pythonhosted.org/packages/33/78/d1a1a026ef3af911159398c939b1509d5c36fe524c7b644f34a5146c4e16/spacy_loggers-1.0.5-py3-none-any.whl.metadata\n",
      "  Downloading spacy_loggers-1.0.5-py3-none-any.whl.metadata (23 kB)\n",
      "Collecting murmurhash<1.1.0,>=0.28.0 (from spacy)\n",
      "  Obtaining dependency information for murmurhash<1.1.0,>=0.28.0 from https://files.pythonhosted.org/packages/71/46/af01a20ec368bd9cb49a1d2df15e3eca113bbf6952cc1f2a47f1c6801a7f/murmurhash-1.0.10-cp311-cp311-win_amd64.whl.metadata\n",
      "  Downloading murmurhash-1.0.10-cp311-cp311-win_amd64.whl.metadata (2.0 kB)\n",
      "Collecting cymem<2.1.0,>=2.0.2 (from spacy)\n",
      "  Obtaining dependency information for cymem<2.1.0,>=2.0.2 from https://files.pythonhosted.org/packages/c1/c3/dd044e6f62a3d317c461f6f0c153c6573ed13025752d779e514000c15dd2/cymem-2.0.8-cp311-cp311-win_amd64.whl.metadata\n",
      "  Downloading cymem-2.0.8-cp311-cp311-win_amd64.whl.metadata (8.6 kB)\n",
      "Collecting preshed<3.1.0,>=3.0.2 (from spacy)\n",
      "  Obtaining dependency information for preshed<3.1.0,>=3.0.2 from https://files.pythonhosted.org/packages/e4/fc/78cdbdb79f5d6d45949e72c32445d6c060977ad50a1dcfc0392622165f7c/preshed-3.0.9-cp311-cp311-win_amd64.whl.metadata\n",
      "  Downloading preshed-3.0.9-cp311-cp311-win_amd64.whl.metadata (2.2 kB)\n",
      "Collecting thinc<8.3.0,>=8.2.2 (from spacy)\n",
      "  Obtaining dependency information for thinc<8.3.0,>=8.2.2 from https://files.pythonhosted.org/packages/5e/0e/5e7b24e046e0725eafc37ded0cd9bfaf789efb894101a7aca8a73dba81de/thinc-8.2.5-cp311-cp311-win_amd64.whl.metadata\n",
      "  Downloading thinc-8.2.5-cp311-cp311-win_amd64.whl.metadata (15 kB)\n",
      "Collecting wasabi<1.2.0,>=0.9.1 (from spacy)\n",
      "  Obtaining dependency information for wasabi<1.2.0,>=0.9.1 from https://files.pythonhosted.org/packages/06/7c/34330a89da55610daa5f245ddce5aab81244321101614751e7537f125133/wasabi-1.1.3-py3-none-any.whl.metadata\n",
      "  Downloading wasabi-1.1.3-py3-none-any.whl.metadata (28 kB)\n",
      "Collecting srsly<3.0.0,>=2.4.3 (from spacy)\n",
      "  Obtaining dependency information for srsly<3.0.0,>=2.4.3 from https://files.pythonhosted.org/packages/eb/f5/e3f29993f673d91623df6413ba64e815dd2676fd7932cbc5e7347402ddae/srsly-2.4.8-cp311-cp311-win_amd64.whl.metadata\n",
      "  Downloading srsly-2.4.8-cp311-cp311-win_amd64.whl.metadata (20 kB)\n",
      "Collecting catalogue<2.1.0,>=2.0.6 (from spacy)\n",
      "  Obtaining dependency information for catalogue<2.1.0,>=2.0.6 from https://files.pythonhosted.org/packages/9e/96/d32b941a501ab566a16358d68b6eb4e4acc373fab3c3c4d7d9e649f7b4bb/catalogue-2.0.10-py3-none-any.whl.metadata\n",
      "  Downloading catalogue-2.0.10-py3-none-any.whl.metadata (14 kB)\n",
      "Collecting weasel<0.5.0,>=0.1.0 (from spacy)\n",
      "  Obtaining dependency information for weasel<0.5.0,>=0.1.0 from https://files.pythonhosted.org/packages/2a/87/abd57374044e1f627f0a905ac33c1a7daab35a3a815abfea4e1bafd3fdb1/weasel-0.4.1-py3-none-any.whl.metadata\n",
      "  Downloading weasel-0.4.1-py3-none-any.whl.metadata (4.6 kB)\n",
      "Collecting typer<1.0.0,>=0.3.0 (from spacy)\n",
      "  Obtaining dependency information for typer<1.0.0,>=0.3.0 from https://files.pythonhosted.org/packages/20/b5/11cf2e34fbb11b937e006286ab5b8cfd334fde1c8fa4dd7f491226931180/typer-0.12.3-py3-none-any.whl.metadata\n",
      "  Downloading typer-0.12.3-py3-none-any.whl.metadata (15 kB)\n",
      "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy) (4.65.0)\n",
      "Requirement already satisfied: requests<3.0.0,>=2.13.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy) (2.31.0)\n",
      "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy) (1.10.8)\n",
      "Requirement already satisfied: jinja2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy) (3.1.2)\n",
      "Requirement already satisfied: setuptools in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy) (68.0.0)\n",
      "Requirement already satisfied: packaging>=20.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy) (23.1)\n",
      "Collecting langcodes<4.0.0,>=3.2.0 (from spacy)\n",
      "  Obtaining dependency information for langcodes<4.0.0,>=3.2.0 from https://files.pythonhosted.org/packages/58/70/4058ab0ebb082b18d06888e711baed7f33354a5e0b363bb627586d8c323a/langcodes-3.4.0-py3-none-any.whl.metadata\n",
      "  Downloading langcodes-3.4.0-py3-none-any.whl.metadata (29 kB)\n",
      "Requirement already satisfied: numpy>=1.19.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy) (1.24.3)\n",
      "Collecting language-data>=1.2 (from langcodes<4.0.0,>=3.2.0->spacy)\n",
      "  Obtaining dependency information for language-data>=1.2 from https://files.pythonhosted.org/packages/12/5f/139464da89c49afcc8bb97ebad48818a535220ce01b1f24c61fb80dbe4d0/language_data-1.2.0-py3-none-any.whl.metadata\n",
      "  Downloading language_data-1.2.0-py3-none-any.whl.metadata (4.3 kB)\n",
      "Requirement already satisfied: typing-extensions>=4.2.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (4.7.1)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from requests<3.0.0,>=2.13.0->spacy) (2.0.4)\n",
      "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from requests<3.0.0,>=2.13.0->spacy) (3.4)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from requests<3.0.0,>=2.13.0->spacy) (1.26.16)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from requests<3.0.0,>=2.13.0->spacy) (2024.2.2)\n",
      "Collecting blis<0.8.0,>=0.7.8 (from thinc<8.3.0,>=8.2.2->spacy)\n",
      "  Obtaining dependency information for blis<0.8.0,>=0.7.8 from https://files.pythonhosted.org/packages/2f/09/da0592c74560cc33396504698122f7a56747c82a5e072ca7d2c3397898e1/blis-0.7.11-cp311-cp311-win_amd64.whl.metadata\n",
      "  Downloading blis-0.7.11-cp311-cp311-win_amd64.whl.metadata (7.6 kB)\n",
      "Collecting confection<1.0.0,>=0.0.1 (from thinc<8.3.0,>=8.2.2->spacy)\n",
      "  Obtaining dependency information for confection<1.0.0,>=0.0.1 from https://files.pythonhosted.org/packages/0c/00/3106b1854b45bd0474ced037dfe6b73b90fe68a68968cef47c23de3d43d2/confection-0.1.5-py3-none-any.whl.metadata\n",
      "  Downloading confection-0.1.5-py3-none-any.whl.metadata (19 kB)\n",
      "Requirement already satisfied: colorama in c:\\users\\govin\\anaconda3\\lib\\site-packages (from tqdm<5.0.0,>=4.38.0->spacy) (0.4.6)\n",
      "Requirement already satisfied: click>=8.0.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from typer<1.0.0,>=0.3.0->spacy) (8.0.4)\n",
      "Collecting shellingham>=1.3.0 (from typer<1.0.0,>=0.3.0->spacy)\n",
      "  Obtaining dependency information for shellingham>=1.3.0 from https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl.metadata\n",
      "  Downloading shellingham-1.5.4-py2.py3-none-any.whl.metadata (3.5 kB)\n",
      "Requirement already satisfied: rich>=10.11.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from typer<1.0.0,>=0.3.0->spacy) (13.7.1)\n",
      "Collecting cloudpathlib<1.0.0,>=0.7.0 (from weasel<0.5.0,>=0.1.0->spacy)\n",
      "  Obtaining dependency information for cloudpathlib<1.0.0,>=0.7.0 from https://files.pythonhosted.org/packages/bc/ba/d8f2c0151585519759135550574385dd7a223abbc6b6c06dab7ada565773/cloudpathlib-0.18.1-py3-none-any.whl.metadata\n",
      "  Downloading cloudpathlib-0.18.1-py3-none-any.whl.metadata (14 kB)\n",
      "Requirement already satisfied: smart-open<8.0.0,>=5.2.1 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from weasel<0.5.0,>=0.1.0->spacy) (5.2.1)\n",
      "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from jinja2->spacy) (2.1.1)\n",
      "Collecting marisa-trie>=0.7.7 (from language-data>=1.2->langcodes<4.0.0,>=3.2.0->spacy)\n",
      "  Obtaining dependency information for marisa-trie>=0.7.7 from https://files.pythonhosted.org/packages/61/28/b93cd14cd422be8fc091bd454dd48edbf0c2333111183db38c8e5a13e468/marisa_trie-1.2.0-cp311-cp311-win_amd64.whl.metadata\n",
      "  Downloading marisa_trie-1.2.0-cp311-cp311-win_amd64.whl.metadata (9.0 kB)\n",
      "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (2.2.0)\n",
      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (2.15.1)\n",
      "Requirement already satisfied: mdurl~=0.1 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy) (0.1.0)\n",
      "Downloading spacy-3.7.5-cp311-cp311-win_amd64.whl (12.1 MB)\n",
      "   ---------------------------------------- 0.0/12.1 MB ? eta -:--:--\n",
      "   ---------------------------------------- 0.1/12.1 MB 825.8 kB/s eta 0:00:15\n",
      "    --------------------------------------- 0.2/12.1 MB 1.9 MB/s eta 0:00:07\n",
      "    --------------------------------------- 0.3/12.1 MB 1.9 MB/s eta 0:00:07\n",
      "   - -------------------------------------- 0.3/12.1 MB 1.7 MB/s eta 0:00:07\n",
      "   - -------------------------------------- 0.5/12.1 MB 2.6 MB/s eta 0:00:05\n",
      "   -- ------------------------------------- 0.8/12.1 MB 2.8 MB/s eta 0:00:05\n",
      "   --- ------------------------------------ 1.1/12.1 MB 3.8 MB/s eta 0:00:03\n",
      "   --- ------------------------------------ 1.2/12.1 MB 3.7 MB/s eta 0:00:03\n",
      "   ----- ---------------------------------- 1.6/12.1 MB 4.0 MB/s eta 0:00:03\n",
      "   ------- -------------------------------- 2.2/12.1 MB 5.0 MB/s eta 0:00:02\n",
      "   --------- ------------------------------ 2.7/12.1 MB 5.8 MB/s eta 0:00:02\n",
      "   ---------- ----------------------------- 3.2/12.1 MB 6.2 MB/s eta 0:00:02\n",
      "   ---------- ----------------------------- 3.2/12.1 MB 6.3 MB/s eta 0:00:02\n",
      "   ----------- ---------------------------- 3.6/12.1 MB 5.8 MB/s eta 0:00:02\n",
      "   ------------- -------------------------- 4.1/12.1 MB 6.4 MB/s eta 0:00:02\n",
      "   --------------- ------------------------ 4.7/12.1 MB 6.9 MB/s eta 0:00:02\n",
      "   ---------------- ----------------------- 5.0/12.1 MB 7.0 MB/s eta 0:00:02\n",
      "   ----------------- ---------------------- 5.3/12.1 MB 7.0 MB/s eta 0:00:01\n",
      "   ------------------- -------------------- 5.8/12.1 MB 7.2 MB/s eta 0:00:01\n",
      "   --------------------- ------------------ 6.4/12.1 MB 7.5 MB/s eta 0:00:01\n",
      "   ---------------------- ----------------- 6.7/12.1 MB 7.8 MB/s eta 0:00:01\n",
      "   ---------------------- ----------------- 6.8/12.1 MB 7.4 MB/s eta 0:00:01\n",
      "   ------------------------ --------------- 7.4/12.1 MB 7.8 MB/s eta 0:00:01\n",
      "   ------------------------- -------------- 7.7/12.1 MB 7.7 MB/s eta 0:00:01\n",
      "   --------------------------- ------------ 8.2/12.1 MB 7.8 MB/s eta 0:00:01\n",
      "   --------------------------- ------------ 8.4/12.1 MB 7.8 MB/s eta 0:00:01\n",
      "   ---------------------------- ----------- 8.6/12.1 MB 7.6 MB/s eta 0:00:01\n",
      "   ----------------------------- ---------- 8.8/12.1 MB 7.6 MB/s eta 0:00:01\n",
      "   ------------------------------ --------- 9.2/12.1 MB 7.6 MB/s eta 0:00:01\n",
      "   ------------------------------- -------- 9.6/12.1 MB 7.7 MB/s eta 0:00:01\n",
      "   ------------------------------- -------- 9.6/12.1 MB 7.7 MB/s eta 0:00:01\n",
      "   -------------------------------- ------- 9.9/12.1 MB 7.4 MB/s eta 0:00:01\n",
      "   ---------------------------------- ----- 10.4/12.1 MB 8.1 MB/s eta 0:00:01\n",
      "   ------------------------------------ --- 11.0/12.1 MB 9.0 MB/s eta 0:00:01\n",
      "   ------------------------------------- -- 11.2/12.1 MB 8.8 MB/s eta 0:00:01\n",
      "   -------------------------------------- - 11.7/12.1 MB 9.2 MB/s eta 0:00:01\n",
      "   ---------------------------------------  12.1/12.1 MB 9.1 MB/s eta 0:00:01\n",
      "   ---------------------------------------  12.1/12.1 MB 9.1 MB/s eta 0:00:01\n",
      "   ---------------------------------------  12.1/12.1 MB 9.1 MB/s eta 0:00:01\n",
      "   ---------------------------------------  12.1/12.1 MB 9.1 MB/s eta 0:00:01\n",
      "   ---------------------------------------- 12.1/12.1 MB 7.9 MB/s eta 0:00:00\n",
      "Downloading catalogue-2.0.10-py3-none-any.whl (17 kB)\n",
      "Downloading cymem-2.0.8-cp311-cp311-win_amd64.whl (39 kB)\n",
      "Downloading langcodes-3.4.0-py3-none-any.whl (182 kB)\n",
      "   ---------------------------------------- 0.0/182.0 kB ? eta -:--:--\n",
      "   -------------------------------------- - 174.1/182.0 kB ? eta -:--:--\n",
      "   -------------------------------------- - 174.1/182.0 kB ? eta -:--:--\n",
      "   -------------------------------------- - 174.1/182.0 kB ? eta -:--:--\n",
      "   -------------------------------------- - 174.1/182.0 kB ? eta -:--:--\n",
      "   -------------------------------------- 182.0/182.0 kB 842.1 kB/s eta 0:00:00\n",
      "Downloading murmurhash-1.0.10-cp311-cp311-win_amd64.whl (25 kB)\n",
      "Downloading preshed-3.0.9-cp311-cp311-win_amd64.whl (122 kB)\n",
      "   ---------------------------------------- 0.0/122.3 kB ? eta -:--:--\n",
      "   ---------------------------------------- 122.3/122.3 kB 3.6 MB/s eta 0:00:00\n",
      "Downloading spacy_legacy-3.0.12-py2.py3-none-any.whl (29 kB)\n",
      "Downloading spacy_loggers-1.0.5-py3-none-any.whl (22 kB)\n",
      "Downloading srsly-2.4.8-cp311-cp311-win_amd64.whl (479 kB)\n",
      "   ---------------------------------------- 0.0/479.7 kB ? eta -:--:--\n",
      "   --------------------------------------- 479.7/479.7 kB 15.1 MB/s eta 0:00:00\n",
      "Downloading thinc-8.2.5-cp311-cp311-win_amd64.whl (1.5 MB)\n",
      "   ---------------------------------------- 0.0/1.5 MB ? eta -:--:--\n",
      "   --------- ------------------------------ 0.4/1.5 MB 11.2 MB/s eta 0:00:01\n",
      "   ------------------------ --------------- 0.9/1.5 MB 9.6 MB/s eta 0:00:01\n",
      "   ---------------------------------------  1.5/1.5 MB 11.7 MB/s eta 0:00:01\n",
      "   ---------------------------------------- 1.5/1.5 MB 9.4 MB/s eta 0:00:00\n",
      "Downloading typer-0.12.3-py3-none-any.whl (47 kB)\n",
      "   ---------------------------------------- 0.0/47.2 kB ? eta -:--:--\n",
      "   ---------------------------------------- 47.2/47.2 kB 2.3 MB/s eta 0:00:00\n",
      "Downloading wasabi-1.1.3-py3-none-any.whl (27 kB)\n",
      "Downloading weasel-0.4.1-py3-none-any.whl (50 kB)\n",
      "   ---------------------------------------- 0.0/50.3 kB ? eta -:--:--\n",
      "   ---------------------------------------- 50.3/50.3 kB 2.5 MB/s eta 0:00:00\n",
      "Downloading blis-0.7.11-cp311-cp311-win_amd64.whl (6.6 MB)\n",
      "   ---------------------------------------- 0.0/6.6 MB ? eta -:--:--\n",
      "   --- ------------------------------------ 0.6/6.6 MB 12.0 MB/s eta 0:00:01\n",
      "   ------- -------------------------------- 1.2/6.6 MB 15.6 MB/s eta 0:00:01\n",
      "   ---------- ----------------------------- 1.8/6.6 MB 14.4 MB/s eta 0:00:01\n",
      "   ------------ --------------------------- 2.1/6.6 MB 14.6 MB/s eta 0:00:01\n",
      "   --------------- ------------------------ 2.5/6.6 MB 11.5 MB/s eta 0:00:01\n",
      "   ------------------- -------------------- 3.3/6.6 MB 12.2 MB/s eta 0:00:01\n",
      "   ---------------------- ----------------- 3.8/6.6 MB 12.1 MB/s eta 0:00:01\n",
      "   ------------------------ --------------- 4.1/6.6 MB 12.3 MB/s eta 0:00:01\n",
      "   ---------------------------- ----------- 4.6/6.6 MB 11.8 MB/s eta 0:00:01\n",
      "   -------------------------------- ------- 5.4/6.6 MB 11.8 MB/s eta 0:00:01\n",
      "   ------------------------------------ --- 6.0/6.6 MB 11.9 MB/s eta 0:00:01\n",
      "   ---------------------------------------  6.6/6.6 MB 12.4 MB/s eta 0:00:01\n",
      "   ---------------------------------------- 6.6/6.6 MB 11.4 MB/s eta 0:00:00\n",
      "Downloading cloudpathlib-0.18.1-py3-none-any.whl (47 kB)\n",
      "   ---------------------------------------- 0.0/47.3 kB ? eta -:--:--\n",
      "   ---------------------------------------- 47.3/47.3 kB 2.3 MB/s eta 0:00:00\n",
      "Downloading confection-0.1.5-py3-none-any.whl (35 kB)\n",
      "Downloading language_data-1.2.0-py3-none-any.whl (5.4 MB)\n",
      "   ---------------------------------------- 0.0/5.4 MB ? eta -:--:--\n",
      "   ----- ---------------------------------- 0.7/5.4 MB 15.0 MB/s eta 0:00:01\n",
      "   ---------- ----------------------------- 1.4/5.4 MB 14.6 MB/s eta 0:00:01\n",
      "   --------------- ------------------------ 2.0/5.4 MB 14.5 MB/s eta 0:00:01\n",
      "   ------------------- -------------------- 2.6/5.4 MB 15.1 MB/s eta 0:00:01\n",
      "   -------------------- ------------------- 2.8/5.4 MB 15.0 MB/s eta 0:00:01\n",
      "   ----------------------- ---------------- 3.1/5.4 MB 11.7 MB/s eta 0:00:01\n",
      "   --------------------------- ------------ 3.8/5.4 MB 12.0 MB/s eta 0:00:01\n",
      "   -------------------------------- ------- 4.4/5.4 MB 12.6 MB/s eta 0:00:01\n",
      "   ------------------------------------ --- 4.9/5.4 MB 12.6 MB/s eta 0:00:01\n",
      "   ---------------------------------------  5.4/5.4 MB 12.3 MB/s eta 0:00:01\n",
      "   ---------------------------------------- 5.4/5.4 MB 11.5 MB/s eta 0:00:00\n",
      "Downloading shellingham-1.5.4-py2.py3-none-any.whl (9.8 kB)\n",
      "Downloading marisa_trie-1.2.0-cp311-cp311-win_amd64.whl (152 kB)\n",
      "   ---------------------------------------- 0.0/152.6 kB ? eta -:--:--\n",
      "   ---------------------------------------- 152.6/152.6 kB 9.5 MB/s eta 0:00:00\n",
      "Installing collected packages: cymem, wasabi, spacy-loggers, spacy-legacy, shellingham, murmurhash, marisa-trie, cloudpathlib, catalogue, blis, srsly, preshed, language-data, typer, langcodes, confection, weasel, thinc, spacy\n",
      "Successfully installed blis-0.7.11 catalogue-2.0.10 cloudpathlib-0.18.1 confection-0.1.5 cymem-2.0.8 langcodes-3.4.0 language-data-1.2.0 marisa-trie-1.2.0 murmurhash-1.0.10 preshed-3.0.9 shellingham-1.5.4 spacy-3.7.5 spacy-legacy-3.0.12 spacy-loggers-1.0.5 srsly-2.4.8 thinc-8.2.5 typer-0.12.3 wasabi-1.1.3 weasel-0.4.1\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting en-core-web-sm==3.7.1\n",
      "  Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl (12.8 MB)\n",
      "     ---------------------------------------- 0.0/12.8 MB ? eta -:--:--\n",
      "     ---------------------------------------- 0.0/12.8 MB ? eta -:--:--\n",
      "     ---------------------------------------- 0.0/12.8 MB ? eta -:--:--\n",
      "     ---------------------------------------- 0.0/12.8 MB ? eta -:--:--\n",
      "     ---------------------------------------- 0.0/12.8 MB ? eta -:--:--\n",
      "     --------------------------------------- 0.0/12.8 MB 145.2 kB/s eta 0:01:28\n",
      "     --------------------------------------- 0.0/12.8 MB 163.4 kB/s eta 0:01:19\n",
      "     --------------------------------------- 0.2/12.8 MB 573.4 kB/s eta 0:00:23\n",
      "     - -------------------------------------- 0.5/12.8 MB 1.7 MB/s eta 0:00:08\n",
      "     -- ------------------------------------- 0.8/12.8 MB 2.3 MB/s eta 0:00:06\n",
      "     --- ------------------------------------ 1.3/12.8 MB 3.3 MB/s eta 0:00:04\n",
      "     ----- ---------------------------------- 1.7/12.8 MB 4.2 MB/s eta 0:00:03\n",
      "     ------ --------------------------------- 2.2/12.8 MB 4.8 MB/s eta 0:00:03\n",
      "     -------- ------------------------------- 2.6/12.8 MB 5.2 MB/s eta 0:00:02\n",
      "     -------- ------------------------------- 2.8/12.8 MB 5.3 MB/s eta 0:00:02\n",
      "     ---------- ----------------------------- 3.3/12.8 MB 5.6 MB/s eta 0:00:02\n",
      "     ---------- ----------------------------- 3.3/12.8 MB 5.5 MB/s eta 0:00:02\n",
      "     ----------- ---------------------------- 3.8/12.8 MB 5.8 MB/s eta 0:00:02\n",
      "     ------------- -------------------------- 4.3/12.8 MB 6.2 MB/s eta 0:00:02\n",
      "     -------------- ------------------------- 4.8/12.8 MB 6.5 MB/s eta 0:00:02\n",
      "     ----------------- ---------------------- 5.5/12.8 MB 6.8 MB/s eta 0:00:02\n",
      "     ------------------- -------------------- 6.1/12.8 MB 7.1 MB/s eta 0:00:01\n",
      "     -------------------- ------------------- 6.6/12.8 MB 7.2 MB/s eta 0:00:01\n",
      "     ---------------------- ----------------- 7.2/12.8 MB 7.5 MB/s eta 0:00:01\n",
      "     ----------------------- ---------------- 7.6/12.8 MB 7.5 MB/s eta 0:00:01\n",
      "     ------------------------- -------------- 8.0/12.8 MB 7.5 MB/s eta 0:00:01\n",
      "     -------------------------- ------------- 8.4/12.8 MB 7.4 MB/s eta 0:00:01\n",
      "     ---------------------------- ----------- 9.0/12.8 MB 7.6 MB/s eta 0:00:01\n",
      "     ----------------------------- ---------- 9.5/12.8 MB 7.8 MB/s eta 0:00:01\n",
      "     ------------------------------ --------- 9.9/12.8 MB 7.8 MB/s eta 0:00:01\n",
      "     -------------------------------- ------- 10.5/12.8 MB 9.8 MB/s eta 0:00:01\n",
      "     ---------------------------------- ----- 11.2/12.8 MB 9.9 MB/s eta 0:00:01\n",
      "     ------------------------------------ -- 12.1/12.8 MB 10.1 MB/s eta 0:00:01\n",
      "     --------------------------------------  12.7/12.8 MB 10.2 MB/s eta 0:00:01\n",
      "     --------------------------------------  12.8/12.8 MB 10.2 MB/s eta 0:00:01\n",
      "     ---------------------------------------- 12.8/12.8 MB 9.3 MB/s eta 0:00:00\n",
      "Requirement already satisfied: spacy<3.8.0,>=3.7.2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from en-core-web-sm==3.7.1) (3.7.5)\n",
      "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.0.12)\n",
      "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.0.5)\n",
      "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.0.10)\n",
      "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.0.8)\n",
      "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.0.9)\n",
      "Requirement already satisfied: thinc<8.3.0,>=8.2.2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (8.2.5)\n",
      "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.1.3)\n",
      "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.4.8)\n",
      "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.0.10)\n",
      "Requirement already satisfied: weasel<0.5.0,>=0.1.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.4.1)\n",
      "Requirement already satisfied: typer<1.0.0,>=0.3.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.12.3)\n",
      "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (4.65.0)\n",
      "Requirement already satisfied: requests<3.0.0,>=2.13.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.31.0)\n",
      "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.10.8)\n",
      "Requirement already satisfied: jinja2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.1.2)\n",
      "Requirement already satisfied: setuptools in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (68.0.0)\n",
      "Requirement already satisfied: packaging>=20.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (23.1)\n",
      "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.4.0)\n",
      "Requirement already satisfied: numpy>=1.19.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.24.3)\n",
      "Requirement already satisfied: language-data>=1.2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from langcodes<4.0.0,>=3.2.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.2.0)\n",
      "Requirement already satisfied: typing-extensions>=4.2.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (4.7.1)\n",
      "Requirement already satisfied: charset-normalizer<4,>=2 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.0.4)\n",
      "Requirement already satisfied: idna<4,>=2.5 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.4)\n",
      "Requirement already satisfied: urllib3<3,>=1.21.1 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.26.16)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2024.2.2)\n",
      "Requirement already satisfied: blis<0.8.0,>=0.7.8 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from thinc<8.3.0,>=8.2.2->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.7.11)\n",
      "Requirement already satisfied: confection<1.0.0,>=0.0.1 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from thinc<8.3.0,>=8.2.2->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.1.5)\n",
      "Requirement already satisfied: colorama in c:\\users\\govin\\anaconda3\\lib\\site-packages (from tqdm<5.0.0,>=4.38.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.4.6)\n",
      "Requirement already satisfied: click>=8.0.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from typer<1.0.0,>=0.3.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (8.0.4)\n",
      "Requirement already satisfied: shellingham>=1.3.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from typer<1.0.0,>=0.3.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.5.4)\n",
      "Requirement already satisfied: rich>=10.11.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from typer<1.0.0,>=0.3.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (13.7.1)\n",
      "Requirement already satisfied: cloudpathlib<1.0.0,>=0.7.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from weasel<0.5.0,>=0.1.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.18.1)\n",
      "Requirement already satisfied: smart-open<8.0.0,>=5.2.1 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from weasel<0.5.0,>=0.1.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (5.2.1)\n",
      "Requirement already satisfied: MarkupSafe>=2.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from jinja2->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.1.1)\n",
      "Requirement already satisfied: marisa-trie>=0.7.7 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from language-data>=1.2->langcodes<4.0.0,>=3.2.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.2.0)\n",
      "Requirement already satisfied: markdown-it-py>=2.2.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.2.0)\n",
      "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.15.1)\n",
      "Requirement already satisfied: mdurl~=0.1 in c:\\users\\govin\\anaconda3\\lib\\site-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->typer<1.0.0,>=0.3.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.1.0)\n",
      "Installing collected packages: en-core-web-sm\n",
      "Successfully installed en-core-web-sm-3.7.1\n",
      "\u001b[38;5;2m[+] Download and installation successful\u001b[0m\n",
      "You can now load the package via spacy.load('en_core_web_sm')\n"
     ]
    }
   ],
   "source": [
    "!pip install spacy\n",
    "!python -m spacy download en_core_web_sm\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "2c49eefa",
   "metadata": {},
   "outputs": [],
   "source": [
    "import spacy\n",
    "from spacy.lang.en.stop_words import STOP_WORDS\n",
    "\n",
    "nlp = spacy.load(\"en_core_web_sm\")\n",
    "\n",
    "def clean_and_extract_tags(text):\n",
    "    doc = nlp(text.lower())\n",
    "    tags = [token.text for token in doc if token.text.isalnum() and token.text not in STOP_WORDS]\n",
    "    return ', '.join(tags)\n",
    "\n",
    "columns_to_extract_tags_from = ['Category', 'Brand', 'Description']\n",
    "\n",
    "for column in columns_to_extract_tags_from:\n",
    "    train_data[column] = train_data[column].apply(clean_and_extract_tags)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "c8ae69c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Concatenate the cleaned tags from all relevant columns\n",
    "train_data['Tags'] = train_data[columns_to_extract_tags_from].apply(lambda row: ', '.join(row), axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "844cf03c",
   "metadata": {},
   "source": [
    "# Rating Base Recommendations System"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "0e17cab4",
   "metadata": {},
   "outputs": [],
   "source": [
    "average_ratings = train_data.groupby(['Name','ReviewCount','Brand','ImageURL'])['Rating'].mean().reset_index()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "9bdb9c42",
   "metadata": {},
   "outputs": [],
   "source": [
    "top_rated_items = average_ratings.sort_values(by='Rating', ascending=False)\n",
    "\n",
    "rating_base_recommendation = top_rated_items.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "id": "dbd775cb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                   Name  ReviewCount  \\\n",
      "1686  Electric Shaver, Triple Shaving Time Electric ...            4   \n",
      "526                 Alaffia Body Lotion, Vanilla, 32 Oz            2   \n",
      "2053  Gold Bond Ultimate Ultimate Healing Lotion, Al...            2   \n",
      "4716  Versace Man Eau Fraiche Eau De Toilette Spray,...           24   \n",
      "2058  Goldwell StyleSign 1 Flat Marvel Straightening...            2   \n",
      "\n",
      "           Brand                                           ImageURL  Rating  \n",
      "1686      moosoo  https://i5.walmartimages.com/asr/e7dcd553-90df...       5  \n",
      "526      alaffia  https://i5.walmartimages.com/asr/2988c323-cb6f...       5  \n",
      "2053  gold, bond  https://i5.walmartimages.com/asr/34b610e7-05db...       5  \n",
      "4716     versace  https://i5.walmartimages.com/asr/edaaeed5-9da0...       5  \n",
      "2058    goldwell  https://i5.walmartimages.com/asr/3bf90289-6980...       5  \n"
     ]
    }
   ],
   "source": [
    "# Convert 'Rating' to float first if it contains decimal values, then to integers\n",
    "rating_base_recommendation.loc[:, 'Rating'] = rating_base_recommendation['Rating'].astype(float).astype(int)\n",
    "\n",
    "# Convert 'ReviewCount' directly to integers\n",
    "rating_base_recommendation.loc[:, 'ReviewCount'] = rating_base_recommendation['ReviewCount'].astype(int)\n",
    "\n",
    "# Display the first few rows to verify changes\n",
    "print(rating_base_recommendation.head())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "id": "eeefbc7b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Rating Base Recommendation System: (Trending Products)\n"
     ]
    }
   ],
   "source": [
    "# Ensure the columns exist and are in the correct format\n",
    "rating_base_recommendation.loc[:, 'Rating'] = rating_base_recommendation['Rating'].astype(int)\n",
    "rating_base_recommendation.loc[:, 'ReviewCount'] = rating_base_recommendation['ReviewCount'].astype(int)\n",
    "\n",
    "# Print the message\n",
    "print(\"Rating Base Recommendation System: (Trending Products)\")\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "id": "ed30d7a7",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                                                   Name  Rating  ReviewCount  \\\n",
      "1686  Electric Shaver, Triple Shaving Time Electric ...       5            4   \n",
      "526                 Alaffia Body Lotion, Vanilla, 32 Oz       5            2   \n",
      "2053  Gold Bond Ultimate Ultimate Healing Lotion, Al...       5            2   \n",
      "4716  Versace Man Eau Fraiche Eau De Toilette Spray,...       5           24   \n",
      "2058  Goldwell StyleSign 1 Flat Marvel Straightening...       5            2   \n",
      "3842  Red Devil 0322 Steel Wool # 00 Very Fine, 8 Pa...       5            1   \n",
      "510   Air Wick Plug in Starter Kit, Warmer + 1 Refil...       5            1   \n",
      "3841  Recovery Complex Anti-Frizz Shine Serum by Bai...       5            4   \n",
      "2687  Long Aid Extra Dry Formula Curl Activator Gel ...       5           12   \n",
      "2062  Good Sense 60-Day Air Care System, Citrus, 2 o...       5            1   \n",
      "\n",
      "                Brand                                           ImageURL  \n",
      "1686           moosoo  https://i5.walmartimages.com/asr/e7dcd553-90df...  \n",
      "526           alaffia  https://i5.walmartimages.com/asr/2988c323-cb6f...  \n",
      "2053       gold, bond  https://i5.walmartimages.com/asr/34b610e7-05db...  \n",
      "4716          versace  https://i5.walmartimages.com/asr/edaaeed5-9da0...  \n",
      "2058         goldwell  https://i5.walmartimages.com/asr/3bf90289-6980...  \n",
      "3842       red, devil  https://i5.walmartimages.com/asr/60bfe5ba-774c...  \n",
      "510         air, wick  https://i5.walmartimages.com/asr/0fac65b2-c6aa...  \n",
      "3841  bain, de, terre  https://i5.walmartimages.com/asr/fcdb4d2e-3727...  \n",
      "2687        long, aid  https://i5.walmartimages.com/asr/f7f29199-bfa5...  \n",
      "2062         diversey  https://i5.walmartimages.com/asr/025a7068-7bb1...  \n"
     ]
    }
   ],
   "source": [
    "\n",
    "# Display the subset of columns\n",
    "rating_base_recommendation_subset = rating_base_recommendation[['Name', 'Rating', 'ReviewCount', 'Brand', 'ImageURL']]\n",
    "print(rating_base_recommendation_subset)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6c86fcf",
   "metadata": {},
   "source": [
    "# Content Base Recommendation system (User Preferences or Items similarities)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "79cc6f25",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.metrics.pairwise import cosine_similarity\n",
    "\n",
    "tfidf_vectorizer = TfidfVectorizer(stop_words='english')\n",
    "tfidf_matrix_content = tfidf_vectorizer.fit_transform(train_data['Tags'])\n",
    "cosine_similarities_content = cosine_similarity(tfidf_matrix_content,tfidf_matrix_content)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "91457320",
   "metadata": {},
   "outputs": [],
   "source": [
    "item_name = 'OPI Infinite Shine, Nail Lacquer Nail Polish, Bubble Bath'\n",
    "item_index = train_data[train_data['Name']==item_name].index[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "e763a44d",
   "metadata": {},
   "outputs": [],
   "source": [
    "similar_items = list(enumerate(cosine_similarities_content[item_index]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "2066dd9c",
   "metadata": {},
   "outputs": [],
   "source": [
    "similar_items = sorted(similar_items, key=lambda x:x[1], reverse=True)\n",
    "top_similar_items = similar_items[1:10]\n",
    "\n",
    "recommended_items_indics = [x[0] for x in top_similar_items]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "721fa02b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>ReviewCount</th>\n",
       "      <th>Brand</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>OPI Nail Lacquer Polish .5oz/15mL - This Gown ...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>184</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>205</th>\n",
       "      <td>OPI Nail Lacquer - Dont Bossa Nova Me Around -...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>237</th>\n",
       "      <td>OPI Infinite Shine 2 Polish - ISL P33 - Alpaca...</td>\n",
       "      <td>5.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>325</th>\n",
       "      <td>OPI Gel Polish Fall 2019 Scotland Collection G...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>375</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>402</th>\n",
       "      <td>OPI Nail Polish, Strawberry Margarita, 0.5 Fl Oz</td>\n",
       "      <td>57.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>706</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>OPI- Nail Lacquer-GelColor - &amp;quotLiv&amp;quotin t...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                  Name  ReviewCount Brand\n",
       "156  OPI Nail Lacquer Polish .5oz/15mL - This Gown ...          0.0   opi\n",
       "184  OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          0.0   opi\n",
       "205  OPI Nail Lacquer - Dont Bossa Nova Me Around -...          0.0   opi\n",
       "237  OPI Infinite Shine 2 Polish - ISL P33 - Alpaca...          5.0   opi\n",
       "325  OPI Gel Polish Fall 2019 Scotland Collection G...          1.0   opi\n",
       "375  OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          1.0   opi\n",
       "402   OPI Nail Polish, Strawberry Margarita, 0.5 Fl Oz         57.0   opi\n",
       "706  OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          1.0   opi\n",
       "886  OPI- Nail Lacquer-GelColor - &quotLiv&quotin t...          0.0   opi"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data.iloc[recommended_items_indics][['Name','ReviewCount','Brand']]"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6d143b78",
   "metadata": {},
   "source": [
    "# Function To Recommend Products for Content Base"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "06226aae",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.metrics.pairwise import cosine_similarity\n",
    "\n",
    "def content_based_recommendations(train_data, item_name, top_n=10):\n",
    "    # Check if the item name exists in the training data\n",
    "    if item_name not in train_data['Name'].values:\n",
    "        print(f\"Item '{item_name}' not found in the training data.\")\n",
    "        return pd.DataFrame()\n",
    "\n",
    "    # Create a TF-IDF vectorizer for item descriptions\n",
    "    tfidf_vectorizer = TfidfVectorizer(stop_words='english')\n",
    "\n",
    "    # Apply TF-IDF vectorization to item descriptions\n",
    "    tfidf_matrix_content = tfidf_vectorizer.fit_transform(train_data['Tags'])\n",
    "\n",
    "    # Calculate cosine similarity between items based on descriptions\n",
    "    cosine_similarities_content = cosine_similarity(tfidf_matrix_content, tfidf_matrix_content)\n",
    "\n",
    "    # Find the index of the item\n",
    "    item_index = train_data[train_data['Name'] == item_name].index[0]\n",
    "\n",
    "    # Get the cosine similarity scores for the item\n",
    "    similar_items = list(enumerate(cosine_similarities_content[item_index]))\n",
    "\n",
    "    # Sort similar items by similarity score in descending order\n",
    "    similar_items = sorted(similar_items, key=lambda x: x[1], reverse=True)\n",
    "\n",
    "    # Get the top N most similar items (excluding the item itself)\n",
    "    top_similar_items = similar_items[1:top_n+1]\n",
    "\n",
    "    # Get the indices of the top similar items\n",
    "    recommended_item_indices = [x[0] for x in top_similar_items]\n",
    "\n",
    "    # Get the details of the top similar items\n",
    "    recommended_items_details = train_data.iloc[recommended_item_indices][['Name', 'ReviewCount', 'Brand', 'ImageURL', 'Rating']]\n",
    "\n",
    "    return recommended_items_details"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "d9d95dce",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>ReviewCount</th>\n",
       "      <th>Brand</th>\n",
       "      <th>ImageURL</th>\n",
       "      <th>Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>OPI Nail Lacquer Polish .5oz/15mL - This Gown ...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/71caed3f-5f83...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>184</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/2d6f5147-53a8...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>205</th>\n",
       "      <td>OPI Nail Lacquer - Dont Bossa Nova Me Around -...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/fd1195d2-8d8d...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>237</th>\n",
       "      <td>OPI Infinite Shine 2 Polish - ISL P33 - Alpaca...</td>\n",
       "      <td>5.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/7426eb5c-1690...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>325</th>\n",
       "      <td>OPI Gel Polish Fall 2019 Scotland Collection G...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/79bbbd9f-9a89...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>375</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/744e869c-3500...</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>402</th>\n",
       "      <td>OPI Nail Polish, Strawberry Margarita, 0.5 Fl Oz</td>\n",
       "      <td>57.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/b95676e5-96ab...</td>\n",
       "      <td>4.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>706</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/c7ba4815-52f7...</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                  Name  ReviewCount Brand  \\\n",
       "156  OPI Nail Lacquer Polish .5oz/15mL - This Gown ...          0.0   opi   \n",
       "184  OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          0.0   opi   \n",
       "205  OPI Nail Lacquer - Dont Bossa Nova Me Around -...          0.0   opi   \n",
       "237  OPI Infinite Shine 2 Polish - ISL P33 - Alpaca...          5.0   opi   \n",
       "325  OPI Gel Polish Fall 2019 Scotland Collection G...          1.0   opi   \n",
       "375  OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          1.0   opi   \n",
       "402   OPI Nail Polish, Strawberry Margarita, 0.5 Fl Oz         57.0   opi   \n",
       "706  OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          1.0   opi   \n",
       "\n",
       "                                              ImageURL  Rating  \n",
       "156  https://i5.walmartimages.com/asr/71caed3f-5f83...     0.0  \n",
       "184  https://i5.walmartimages.com/asr/2d6f5147-53a8...     0.0  \n",
       "205  https://i5.walmartimages.com/asr/fd1195d2-8d8d...     0.0  \n",
       "237  https://i5.walmartimages.com/asr/7426eb5c-1690...     0.0  \n",
       "325  https://i5.walmartimages.com/asr/79bbbd9f-9a89...     0.0  \n",
       "375  https://i5.walmartimages.com/asr/744e869c-3500...     5.0  \n",
       "402  https://i5.walmartimages.com/asr/b95676e5-96ab...     4.4  \n",
       "706  https://i5.walmartimages.com/asr/c7ba4815-52f7...     5.0  "
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Example: Get content-based recommendations for a specific item\n",
    "item_name = 'OPI Infinite Shine, Nail Lacquer Nail Polish, Bubble Bath'\n",
    "content_based_rec = content_based_recommendations(train_data, item_name, top_n=8)\n",
    "\n",
    "content_based_rec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "04ebc5a6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>ReviewCount</th>\n",
       "      <th>Brand</th>\n",
       "      <th>ImageURL</th>\n",
       "      <th>Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>3406</th>\n",
       "      <td>Kokie Professional Matte Lipstick, Firecracker...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>kokie, cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/8312221b-ed22...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>546</th>\n",
       "      <td>Kokie Professional Matte Lipstick, Kiss Me, 0....</td>\n",
       "      <td>0.0</td>\n",
       "      <td>kokie, cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/27dd82a2-2b9c...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2406</th>\n",
       "      <td>L.A. Colors Matte Lipstick, Tender Matte</td>\n",
       "      <td>3.0</td>\n",
       "      <td>colors</td>\n",
       "      <td>https://i5.walmartimages.com/asr/271264fb-e8c3...</td>\n",
       "      <td>3.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4050</th>\n",
       "      <td>Kokie Professional Lip Poudre Liquid Matte Liq...</td>\n",
       "      <td>7.0</td>\n",
       "      <td>kokie, cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/fdd7498c-319f...</td>\n",
       "      <td>3.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4084</th>\n",
       "      <td>e.l.f. Mad for Matte 4 Piece Lip Color Set</td>\n",
       "      <td>0.0</td>\n",
       "      <td>cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/e2d30304-edc9...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1559</th>\n",
       "      <td>LOreal Paris Colour Riche Matte Lip Liner, Mat...</td>\n",
       "      <td>495.0</td>\n",
       "      <td>paris</td>\n",
       "      <td>https://i5.walmartimages.com/asr/baf97085-7231...</td>\n",
       "      <td>4.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2873</th>\n",
       "      <td>Kokie Professional Lip Poudre Liquid Matte Liq...</td>\n",
       "      <td>7.0</td>\n",
       "      <td>kokie, cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/31c99d9b-ea11...</td>\n",
       "      <td>3.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3023</th>\n",
       "      <td>Be Matte Lipstick - Pink</td>\n",
       "      <td>2.0</td>\n",
       "      <td>city, color</td>\n",
       "      <td>https://i5.walmartimages.com/asr/4425a13e-085f...</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   Name  ReviewCount  \\\n",
       "3406  Kokie Professional Matte Lipstick, Firecracker...          0.0   \n",
       "546   Kokie Professional Matte Lipstick, Kiss Me, 0....          0.0   \n",
       "2406           L.A. Colors Matte Lipstick, Tender Matte          3.0   \n",
       "4050  Kokie Professional Lip Poudre Liquid Matte Liq...          7.0   \n",
       "4084         e.l.f. Mad for Matte 4 Piece Lip Color Set          0.0   \n",
       "1559  LOreal Paris Colour Riche Matte Lip Liner, Mat...        495.0   \n",
       "2873  Kokie Professional Lip Poudre Liquid Matte Liq...          7.0   \n",
       "3023                           Be Matte Lipstick - Pink          2.0   \n",
       "\n",
       "                 Brand                                           ImageURL  \\\n",
       "3406  kokie, cosmetics  https://i5.walmartimages.com/asr/8312221b-ed22...   \n",
       "546   kokie, cosmetics  https://i5.walmartimages.com/asr/27dd82a2-2b9c...   \n",
       "2406            colors  https://i5.walmartimages.com/asr/271264fb-e8c3...   \n",
       "4050  kokie, cosmetics  https://i5.walmartimages.com/asr/fdd7498c-319f...   \n",
       "4084         cosmetics  https://i5.walmartimages.com/asr/e2d30304-edc9...   \n",
       "1559             paris  https://i5.walmartimages.com/asr/baf97085-7231...   \n",
       "2873  kokie, cosmetics  https://i5.walmartimages.com/asr/31c99d9b-ea11...   \n",
       "3023       city, color  https://i5.walmartimages.com/asr/4425a13e-085f...   \n",
       "\n",
       "      Rating  \n",
       "3406     0.0  \n",
       "546      0.0  \n",
       "2406     3.7  \n",
       "4050     3.4  \n",
       "4084     0.0  \n",
       "1559     4.4  \n",
       "2873     3.4  \n",
       "3023     3.0  "
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Example: Get content-based recommendations for a specific item\n",
    "item_name = 'Kokie Professional Matte Lipstick, Hot Berry, 0.14 fl oz'\n",
    "content_based_rec = content_based_recommendations(train_data, item_name, top_n=8)\n",
    "\n",
    "content_based_rec"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2c4117a0",
   "metadata": {},
   "source": [
    "# Collaborative Filtering (User Item Similarity)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "561d1f39",
   "metadata": {},
   "outputs": [],
   "source": [
    "user_item_matrix = train_data.pivot_table(index='ID', columns='ProdID', values='Rating',aggfunc='mean').fillna(0).astype(int)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "da389a20",
   "metadata": {},
   "outputs": [],
   "source": [
    "user_similarity = cosine_similarity(user_item_matrix)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "ae4dcb37",
   "metadata": {},
   "outputs": [],
   "source": [
    "target_user_id = 4\n",
    "target_user_index = user_item_matrix.index.get_loc(target_user_id)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "a50c696d",
   "metadata": {},
   "outputs": [],
   "source": [
    "user_similarities = user_similarity[target_user_index]\n",
    "\n",
    "similar_user_indices = user_similarities.argsort()[::-1][1:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "69deed31",
   "metadata": {},
   "outputs": [],
   "source": [
    "recommend_items = []\n",
    "\n",
    "for user_index in similar_user_indices:\n",
    "    rated_by_similar_user = user_item_matrix.iloc[user_index]\n",
    "    not_rated_by_target_user = (rated_by_similar_user==0) & (user_item_matrix.iloc[target_user_index]==0)\n",
    "    \n",
    "    recommend_items.extend(user_item_matrix.columns[not_rated_by_target_user][:10])\n",
    "\n",
    "recommended_items_details = train_data[train_data['ProdID'].isin(recommend_items)][['Name','ReviewCount','Brand','ImageURL','Rating']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "e3c54f65",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>ReviewCount</th>\n",
       "      <th>Brand</th>\n",
       "      <th>ImageURL</th>\n",
       "      <th>Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Clairol Natural Instincts Demi-Permanent Hair ...</td>\n",
       "      <td>2935.0</td>\n",
       "      <td>clairol</td>\n",
       "      <td>https://i5.walmartimages.com/asr/00a6e54a-e431...</td>\n",
       "      <td>3.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>DenTek Kids Fun Flossers, Removes Food &amp; Plaqu...</td>\n",
       "      <td>3.0</td>\n",
       "      <td>dentek</td>\n",
       "      <td>https://i5.walmartimages.com/asr/de6e52eb-6e18...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>COVERGIRL Exhibitionist Cream Lipstick, 395 Da...</td>\n",
       "      <td>713.0</td>\n",
       "      <td>covergirl</td>\n",
       "      <td>https://i5.walmartimages.com/asr/95076ec0-ffbd...</td>\n",
       "      <td>4.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>64</th>\n",
       "      <td>Neutrogena SkinClearing Oil-Free Liquid Founda...</td>\n",
       "      <td>741.0</td>\n",
       "      <td>neutrogena</td>\n",
       "      <td>https://i5.walmartimages.com/asr/fd4d78d8-310a...</td>\n",
       "      <td>4.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>Design Essentials Natural Coconut &amp; Monoi Curl...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>design, essentials</td>\n",
       "      <td>https://i5.walmartimages.com/asr/ff2dba1d-0c02...</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>78</th>\n",
       "      <td>Paul Sebastian Fine Cologne Spray, Cologne for...</td>\n",
       "      <td>28.0</td>\n",
       "      <td>paul, sebastian</td>\n",
       "      <td>https://i5.walmartimages.com/asr/03d08a07-18d7...</td>\n",
       "      <td>4.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>BioAstin Hawaiian Astaxanthin, Vegan, 12mg, 75 Ct</td>\n",
       "      <td>3.0</td>\n",
       "      <td>bioastin</td>\n",
       "      <td>https://i5.walmartimages.com/asr/6da9e238-b19e...</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>92</th>\n",
       "      <td>Bytewise Organic Moringa Leaf Powder, 12 Oz</td>\n",
       "      <td>0.0</td>\n",
       "      <td>bytewise</td>\n",
       "      <td>https://i5.walmartimages.com/asr/076f2b3f-fdc3...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>94</th>\n",
       "      <td>Ag Hair Cosmetics Ultradynamics Extra-Firm Fin...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>ag, hair</td>\n",
       "      <td>https://i5.walmartimages.com/asr/5d217d98-a385...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>OPI Nail Dipping Powder Perfection Combo - Liq...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/ef1607ee-5bdb...</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                  Name  ReviewCount  \\\n",
       "15   Clairol Natural Instincts Demi-Permanent Hair ...       2935.0   \n",
       "33   DenTek Kids Fun Flossers, Removes Food & Plaqu...          3.0   \n",
       "61   COVERGIRL Exhibitionist Cream Lipstick, 395 Da...        713.0   \n",
       "64   Neutrogena SkinClearing Oil-Free Liquid Founda...        741.0   \n",
       "69   Design Essentials Natural Coconut & Monoi Curl...          1.0   \n",
       "78   Paul Sebastian Fine Cologne Spray, Cologne for...         28.0   \n",
       "85   BioAstin Hawaiian Astaxanthin, Vegan, 12mg, 75 Ct          3.0   \n",
       "92         Bytewise Organic Moringa Leaf Powder, 12 Oz          0.0   \n",
       "94   Ag Hair Cosmetics Ultradynamics Extra-Firm Fin...          0.0   \n",
       "108  OPI Nail Dipping Powder Perfection Combo - Liq...          1.0   \n",
       "\n",
       "                  Brand                                           ImageURL  \\\n",
       "15              clairol  https://i5.walmartimages.com/asr/00a6e54a-e431...   \n",
       "33               dentek  https://i5.walmartimages.com/asr/de6e52eb-6e18...   \n",
       "61            covergirl  https://i5.walmartimages.com/asr/95076ec0-ffbd...   \n",
       "64           neutrogena  https://i5.walmartimages.com/asr/fd4d78d8-310a...   \n",
       "69   design, essentials  https://i5.walmartimages.com/asr/ff2dba1d-0c02...   \n",
       "78      paul, sebastian  https://i5.walmartimages.com/asr/03d08a07-18d7...   \n",
       "85             bioastin  https://i5.walmartimages.com/asr/6da9e238-b19e...   \n",
       "92             bytewise  https://i5.walmartimages.com/asr/076f2b3f-fdc3...   \n",
       "94             ag, hair  https://i5.walmartimages.com/asr/5d217d98-a385...   \n",
       "108                 opi  https://i5.walmartimages.com/asr/ef1607ee-5bdb...   \n",
       "\n",
       "     Rating  \n",
       "15      3.7  \n",
       "33      0.0  \n",
       "61      4.3  \n",
       "64      4.2  \n",
       "69      5.0  \n",
       "78      4.8  \n",
       "85      5.0  \n",
       "92      0.0  \n",
       "94      0.0  \n",
       "108     3.0  "
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "recommended_items_details.head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b315744a",
   "metadata": {},
   "source": [
    "# Function That Recommend Items"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "9867d4e0",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top 5 recommendations for User 4:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>ReviewCount</th>\n",
       "      <th>Brand</th>\n",
       "      <th>ImageURL</th>\n",
       "      <th>Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>61</th>\n",
       "      <td>COVERGIRL Exhibitionist Cream Lipstick, 395 Da...</td>\n",
       "      <td>713.0</td>\n",
       "      <td>covergirl</td>\n",
       "      <td>https://i5.walmartimages.com/asr/95076ec0-ffbd...</td>\n",
       "      <td>4.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>85</th>\n",
       "      <td>BioAstin Hawaiian Astaxanthin, Vegan, 12mg, 75 Ct</td>\n",
       "      <td>3.0</td>\n",
       "      <td>bioastin</td>\n",
       "      <td>https://i5.walmartimages.com/asr/6da9e238-b19e...</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>LOreal Paris Feria Multi-Faceted Shimmering Pe...</td>\n",
       "      <td>2144.0</td>\n",
       "      <td>paris</td>\n",
       "      <td>https://i5.walmartimages.com/asr/c229026a-2b75...</td>\n",
       "      <td>3.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>108</th>\n",
       "      <td>OPI Nail Dipping Powder Perfection Combo - Liq...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/ef1607ee-5bdb...</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>144</th>\n",
       "      <td>Covidien Curity Maternity Pad Heavy 4.33&amp;quot ...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>covidien</td>\n",
       "      <td>https://i5.walmartimages.com/asr/e4e38217-ed43...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>155</th>\n",
       "      <td>Crest 3D White Brilliance Mouthwash, Alcohol F...</td>\n",
       "      <td>63.0</td>\n",
       "      <td>crest</td>\n",
       "      <td>https://i5.walmartimages.com/asr/1fcc5525-9ae3...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>174</th>\n",
       "      <td>COVERGIRL Outlast All-Day Moisturizing Lip Col...</td>\n",
       "      <td>36.0</td>\n",
       "      <td>covergirl</td>\n",
       "      <td>https://i5.walmartimages.com/asr/4479896f-c6c4...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>193</th>\n",
       "      <td>Revlon ColorStay Skinny Liquid Liner, 304 Gree...</td>\n",
       "      <td>70.0</td>\n",
       "      <td>revlon</td>\n",
       "      <td>https://i5.walmartimages.com/asr/aa3b20a6-3d6d...</td>\n",
       "      <td>4.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>Comvita Certified UMF 20+ Manuka Honey, Raw &amp; ...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>comvita</td>\n",
       "      <td>https://i5.walmartimages.com/asr/3cdc1498-a2ac...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>241</th>\n",
       "      <td>Ahava Mens Mineral Hand Cream, 3.4 Oz</td>\n",
       "      <td>0.0</td>\n",
       "      <td>ahava</td>\n",
       "      <td>https://i5.walmartimages.com/asr/f74e4bb7-47d3...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                  Name  ReviewCount  \\\n",
       "61   COVERGIRL Exhibitionist Cream Lipstick, 395 Da...        713.0   \n",
       "85   BioAstin Hawaiian Astaxanthin, Vegan, 12mg, 75 Ct          3.0   \n",
       "86   LOreal Paris Feria Multi-Faceted Shimmering Pe...       2144.0   \n",
       "108  OPI Nail Dipping Powder Perfection Combo - Liq...          1.0   \n",
       "144  Covidien Curity Maternity Pad Heavy 4.33&quot ...          0.0   \n",
       "155  Crest 3D White Brilliance Mouthwash, Alcohol F...         63.0   \n",
       "174  COVERGIRL Outlast All-Day Moisturizing Lip Col...         36.0   \n",
       "193  Revlon ColorStay Skinny Liquid Liner, 304 Gree...         70.0   \n",
       "212  Comvita Certified UMF 20+ Manuka Honey, Raw & ...          0.0   \n",
       "241              Ahava Mens Mineral Hand Cream, 3.4 Oz          0.0   \n",
       "\n",
       "         Brand                                           ImageURL  Rating  \n",
       "61   covergirl  https://i5.walmartimages.com/asr/95076ec0-ffbd...     4.3  \n",
       "85    bioastin  https://i5.walmartimages.com/asr/6da9e238-b19e...     5.0  \n",
       "86       paris  https://i5.walmartimages.com/asr/c229026a-2b75...     3.1  \n",
       "108        opi  https://i5.walmartimages.com/asr/ef1607ee-5bdb...     3.0  \n",
       "144   covidien  https://i5.walmartimages.com/asr/e4e38217-ed43...     0.0  \n",
       "155      crest  https://i5.walmartimages.com/asr/1fcc5525-9ae3...     0.0  \n",
       "174  covergirl  https://i5.walmartimages.com/asr/4479896f-c6c4...     0.0  \n",
       "193     revlon  https://i5.walmartimages.com/asr/aa3b20a6-3d6d...     4.5  \n",
       "212    comvita  https://i5.walmartimages.com/asr/3cdc1498-a2ac...     0.0  \n",
       "241      ahava  https://i5.walmartimages.com/asr/f74e4bb7-47d3...     0.0  "
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def collaborative_filtering_recommendations(train_data, target_user_id, top_n=10):\n",
    "    # Create the user-item matrix\n",
    "    user_item_matrix = train_data.pivot_table(index='ID', columns='ProdID', values='Rating', aggfunc='mean').fillna(0)\n",
    "\n",
    "    # Calculate the user similarity matrix using cosine similarity\n",
    "    user_similarity = cosine_similarity(user_item_matrix)\n",
    "\n",
    "    # Find the index of the target user in the matrix\n",
    "    target_user_index = user_item_matrix.index.get_loc(target_user_id)\n",
    "\n",
    "    # Get the similarity scores for the target user\n",
    "    user_similarities = user_similarity[target_user_index]\n",
    "\n",
    "    # Sort the users by similarity in descending order (excluding the target user)\n",
    "    similar_users_indices = user_similarities.argsort()[::-1][1:]\n",
    "\n",
    "    # Generate recommendations based on similar users\n",
    "    recommended_items = []\n",
    "\n",
    "    for user_index in similar_users_indices:\n",
    "        # Get items rated by the similar user but not by the target user\n",
    "        rated_by_similar_user = user_item_matrix.iloc[user_index]\n",
    "        not_rated_by_target_user = (rated_by_similar_user == 0) & (user_item_matrix.iloc[target_user_index] == 0)\n",
    "\n",
    "        # Extract the item IDs of recommended items\n",
    "        recommended_items.extend(user_item_matrix.columns[not_rated_by_target_user][:top_n])\n",
    "\n",
    "    # Get the details of recommended items\n",
    "    recommended_items_details = train_data[train_data['ProdID'].isin(recommended_items)][['Name', 'ReviewCount', 'Brand', 'ImageURL', 'Rating']]\n",
    "\n",
    "    return recommended_items_details.head(10)\n",
    "\n",
    "# Example usage\n",
    "target_user_id = 4\n",
    "top_n = 5\n",
    "collaborative_filtering_rec = collaborative_filtering_recommendations(train_data, target_user_id)\n",
    "print(f\"Top {top_n} recommendations for User {target_user_id}:\")\n",
    "collaborative_filtering_rec"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2839d618",
   "metadata": {},
   "source": [
    "# Hybrid Recommendations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "77dadbb3",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Hybrid Recommendations (Combine Content-Based and Collaborative Filtering)\n",
    "def hybrid_recommendations(train_data,target_user_id, item_name, top_n=10):\n",
    "    # Get content-based recommendations\n",
    "    content_based_rec = content_based_recommendations(train_data,item_name, top_n)\n",
    "\n",
    "    # Get collaborative filtering recommendations\n",
    "    collaborative_filtering_rec = collaborative_filtering_recommendations(train_data,target_user_id, top_n)\n",
    "    \n",
    "    # Merge and deduplicate the recommendations\n",
    "    hybrid_rec = pd.concat([content_based_rec, collaborative_filtering_rec]).drop_duplicates()\n",
    "    \n",
    "    return hybrid_rec.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "5320ae95",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top 10 Hybrid Recommendations for User 4 and Item 'OPI Nail Lacquer Polish .5oz/15mL - This Gown Needs A Crown NL U11':\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>ReviewCount</th>\n",
       "      <th>Brand</th>\n",
       "      <th>ImageURL</th>\n",
       "      <th>Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>OPI Nail Lacquer Polish .5oz/15mL - This Gown ...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/71caed3f-5f83...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>184</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/2d6f5147-53a8...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>205</th>\n",
       "      <td>OPI Nail Lacquer - Dont Bossa Nova Me Around -...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/fd1195d2-8d8d...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>237</th>\n",
       "      <td>OPI Infinite Shine 2 Polish - ISL P33 - Alpaca...</td>\n",
       "      <td>5.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/7426eb5c-1690...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>325</th>\n",
       "      <td>OPI Gel Polish Fall 2019 Scotland Collection G...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/79bbbd9f-9a89...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>375</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/744e869c-3500...</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>402</th>\n",
       "      <td>OPI Nail Polish, Strawberry Margarita, 0.5 Fl Oz</td>\n",
       "      <td>57.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/b95676e5-96ab...</td>\n",
       "      <td>4.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>706</th>\n",
       "      <td>OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/c7ba4815-52f7...</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>886</th>\n",
       "      <td>OPI- Nail Lacquer-GelColor - &amp;quotLiv&amp;quotin t...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/98b4194c-e026...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1042</th>\n",
       "      <td>OPI GelColor Gel Nail Polish, Dulce De Leche, ...</td>\n",
       "      <td>1.0</td>\n",
       "      <td>opi</td>\n",
       "      <td>https://i5.walmartimages.com/asr/c1b2c370-b2d2...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   Name  ReviewCount Brand  \\\n",
       "156   OPI Nail Lacquer Polish .5oz/15mL - This Gown ...          0.0   opi   \n",
       "184   OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          0.0   opi   \n",
       "205   OPI Nail Lacquer - Dont Bossa Nova Me Around -...          0.0   opi   \n",
       "237   OPI Infinite Shine 2 Polish - ISL P33 - Alpaca...          5.0   opi   \n",
       "325   OPI Gel Polish Fall 2019 Scotland Collection G...          1.0   opi   \n",
       "375   OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          1.0   opi   \n",
       "402    OPI Nail Polish, Strawberry Margarita, 0.5 Fl Oz         57.0   opi   \n",
       "706   OPI Nail Gel Polish GelColor .5oz/15mL 3 CT Co...          1.0   opi   \n",
       "886   OPI- Nail Lacquer-GelColor - &quotLiv&quotin t...          0.0   opi   \n",
       "1042  OPI GelColor Gel Nail Polish, Dulce De Leche, ...          1.0   opi   \n",
       "\n",
       "                                               ImageURL  Rating  \n",
       "156   https://i5.walmartimages.com/asr/71caed3f-5f83...     0.0  \n",
       "184   https://i5.walmartimages.com/asr/2d6f5147-53a8...     0.0  \n",
       "205   https://i5.walmartimages.com/asr/fd1195d2-8d8d...     0.0  \n",
       "237   https://i5.walmartimages.com/asr/7426eb5c-1690...     0.0  \n",
       "325   https://i5.walmartimages.com/asr/79bbbd9f-9a89...     0.0  \n",
       "375   https://i5.walmartimages.com/asr/744e869c-3500...     5.0  \n",
       "402   https://i5.walmartimages.com/asr/b95676e5-96ab...     4.4  \n",
       "706   https://i5.walmartimages.com/asr/c7ba4815-52f7...     5.0  \n",
       "886   https://i5.walmartimages.com/asr/98b4194c-e026...     0.0  \n",
       "1042  https://i5.walmartimages.com/asr/c1b2c370-b2d2...     0.0  "
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Example usage: Get hybrid recommendations for a specific user and item\n",
    "target_user_id = 4 # Change this to the user_id you want recommendations for\n",
    "item_name = \"OPI Nail Lacquer Polish .5oz/15mL - This Gown Needs A Crown NL U11\"  # Change this to the item name\n",
    "hybrid_rec = hybrid_recommendations(train_data,target_user_id, item_name, top_n=10)\n",
    "\n",
    "print(f\"Top 10 Hybrid Recommendations for User {target_user_id} and Item '{item_name}':\")\n",
    "hybrid_rec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "c56891bd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Top 10 Hybrid Recommendations for User 10 and Item 'Black Radiance Perfect Tone Matte Lip Crème, Succulent Plum':\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>ReviewCount</th>\n",
       "      <th>Brand</th>\n",
       "      <th>ImageURL</th>\n",
       "      <th>Rating</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>896</th>\n",
       "      <td>Black Radiance Perfect Tone Lip Color, Vintage...</td>\n",
       "      <td>78.0</td>\n",
       "      <td>black, radiance</td>\n",
       "      <td>https://i5.walmartimages.com/asr/485f26b4-a19a...</td>\n",
       "      <td>4.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2496</th>\n",
       "      <td>Black Radiance Perfect Tone Lip Color, Hollywo...</td>\n",
       "      <td>18.0</td>\n",
       "      <td>black, radiance</td>\n",
       "      <td>https://i5.walmartimages.com/asr/fe3da48f-5142...</td>\n",
       "      <td>4.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Kokie Professional Matte Lipstick, Hot Berry, ...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>kokie, cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/25b4b467-bc61...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3406</th>\n",
       "      <td>Kokie Professional Matte Lipstick, Firecracker...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>kokie, cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/8312221b-ed22...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2406</th>\n",
       "      <td>L.A. Colors Matte Lipstick, Tender Matte</td>\n",
       "      <td>3.0</td>\n",
       "      <td>colors</td>\n",
       "      <td>https://i5.walmartimages.com/asr/271264fb-e8c3...</td>\n",
       "      <td>3.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4050</th>\n",
       "      <td>Kokie Professional Lip Poudre Liquid Matte Liq...</td>\n",
       "      <td>7.0</td>\n",
       "      <td>kokie, cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/fdd7498c-319f...</td>\n",
       "      <td>3.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2873</th>\n",
       "      <td>Kokie Professional Lip Poudre Liquid Matte Liq...</td>\n",
       "      <td>7.0</td>\n",
       "      <td>kokie, cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/31c99d9b-ea11...</td>\n",
       "      <td>3.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4872</th>\n",
       "      <td>L.A. Colors Matte Lipstick, Torrid Matte</td>\n",
       "      <td>8.0</td>\n",
       "      <td>colors</td>\n",
       "      <td>https://i5.walmartimages.com/asr/62d6d9fa-eee1...</td>\n",
       "      <td>4.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1300</th>\n",
       "      <td>e.l.f. Liquid Matte Lipstick, Tea Rose</td>\n",
       "      <td>476.0</td>\n",
       "      <td>cosmetics</td>\n",
       "      <td>https://i5.walmartimages.com/asr/58220de4-3875...</td>\n",
       "      <td>4.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>420</th>\n",
       "      <td>Black Opal Color Splurge Sassy Luxe Matte Lips...</td>\n",
       "      <td>0.0</td>\n",
       "      <td>black, opal</td>\n",
       "      <td>https://i5.walmartimages.com/asr/a991241b-e4ad...</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                   Name  ReviewCount  \\\n",
       "896   Black Radiance Perfect Tone Lip Color, Vintage...         78.0   \n",
       "2496  Black Radiance Perfect Tone Lip Color, Hollywo...         18.0   \n",
       "3     Kokie Professional Matte Lipstick, Hot Berry, ...          0.0   \n",
       "3406  Kokie Professional Matte Lipstick, Firecracker...          0.0   \n",
       "2406           L.A. Colors Matte Lipstick, Tender Matte          3.0   \n",
       "4050  Kokie Professional Lip Poudre Liquid Matte Liq...          7.0   \n",
       "2873  Kokie Professional Lip Poudre Liquid Matte Liq...          7.0   \n",
       "4872           L.A. Colors Matte Lipstick, Torrid Matte          8.0   \n",
       "1300             e.l.f. Liquid Matte Lipstick, Tea Rose        476.0   \n",
       "420   Black Opal Color Splurge Sassy Luxe Matte Lips...          0.0   \n",
       "\n",
       "                 Brand                                           ImageURL  \\\n",
       "896    black, radiance  https://i5.walmartimages.com/asr/485f26b4-a19a...   \n",
       "2496   black, radiance  https://i5.walmartimages.com/asr/fe3da48f-5142...   \n",
       "3     kokie, cosmetics  https://i5.walmartimages.com/asr/25b4b467-bc61...   \n",
       "3406  kokie, cosmetics  https://i5.walmartimages.com/asr/8312221b-ed22...   \n",
       "2406            colors  https://i5.walmartimages.com/asr/271264fb-e8c3...   \n",
       "4050  kokie, cosmetics  https://i5.walmartimages.com/asr/fdd7498c-319f...   \n",
       "2873  kokie, cosmetics  https://i5.walmartimages.com/asr/31c99d9b-ea11...   \n",
       "4872            colors  https://i5.walmartimages.com/asr/62d6d9fa-eee1...   \n",
       "1300         cosmetics  https://i5.walmartimages.com/asr/58220de4-3875...   \n",
       "420        black, opal  https://i5.walmartimages.com/asr/a991241b-e4ad...   \n",
       "\n",
       "      Rating  \n",
       "896      4.7  \n",
       "2496     4.3  \n",
       "3        0.0  \n",
       "3406     0.0  \n",
       "2406     3.7  \n",
       "4050     3.4  \n",
       "2873     3.4  \n",
       "4872     4.8  \n",
       "1300     4.1  \n",
       "420      0.0  "
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Example usage: Get hybrid recommendations for a specific user and item\n",
    "target_user_id = 10 # Change this to the user_id you want recommendations for\n",
    "item_name = 'Black Radiance Perfect Tone Matte Lip Crème, Succulent Plum'\n",
    "\n",
    "hybrid_rec = hybrid_recommendations(train_data,target_user_id, item_name, top_n=10)\n",
    "\n",
    "print(f\"Top 10 Hybrid Recommendations for User {target_user_id} and Item '{item_name}':\")\n",
    "hybrid_rec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0f9cc1b6",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "118063f0",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
